PDA

View Full Version : حرفه ای: تولید تعداد نا محدود فایل



SamaPic
شنبه 11 اردیبهشت 1389, 08:50 صبح
با سلام خدمت دوستان گرامی .
با پروژه ای در این ترم برخود کرده ام که در بخشی از آن می بایست به تعداد نامحدود فایل ایجاد و از آنها استفاده نمود .
به عنوان مثال به تعداد 50 عدد فایل از نوع .txt ایجاد و از آنها در جای جای برنامه استفاده نمود . ( عدد 50 تغییر پذیر است در جایی 100 فایل لازم است و در جایی 5 فایل )
لازم به ذکر است که نام و آدرس فایل دارای اهمیت است ، چرا که در خلال برنامه از آنها استفاده می شود .

این برنامه را با استفاده از وکتور ها حل نموده ام ، اما سرعت پایینی دارد و قصد دارم تا سرعت و توانایی آن را بهبود بخشم . و مهم تر از همه ، بدون استفاده از وکتور ها آن را حل نمایم .

با تشکر فراوان .
خدانگهدار .

baran_mehr
شنبه 11 اردیبهشت 1389, 14:45 عصر
فکر کنم بتونی یه پوشه برای نگهداری فایلها درست کنی و ادرس فایلهایی که ایجاد میکنی و داخل یه ارایه و یا یه فایل خاص نگه داری

qwerty11
شنبه 11 اردیبهشت 1389, 14:45 عصر
اگه ممکنه کدت رو یزار.

اگه وکتور اینقدر برنامت رو کند میکنه میتونی یه حد بالا واسه تعداد فایل ها در نظر بگیری و از آرایه استفاده کنی. اما بازم باید اون تیکه کدت رو بینیم تا بشه نظر داد.

tdkhakpur
شنبه 11 اردیبهشت 1389, 21:20 عصر
این برنامه را با استفاده از وکتور ها حل نموده ام ، اما سرعت پایینی دارد و قصد دارم تا سرعت و توانایی آن را بهبود بخشم . و مهم تر از همه ، بدون استفاده از وکتور ها آن را حل نمایم .

فکر نکنم مشکل سرعت از وکتور باشه ممکنه سیستم شما مشکلی برایش پیش امده باشد.
نمونه زیر بدون استفاده از وکتور هاست


char **TmpFileName;
void InitNewFiles( char *PathName, char *filename, int count)
{
FILE *fp;
char string[25];
int len;
TmpFileName = (char **) new char[4*count];
for( int i=0; i<count; i++){
TmpFileName[i] = new char[256];
strcpy(TmpFileName[i], PathName);
len = strlen(TmpFileName[i]);
strcpy(&TmpFileName[i][len], "\\");
len = strlen(TmpFileName[i]);
strcpy(&TmpFileName[i][len], filename);
len = strlen(TmpFileName[i]);
itoa(i, string, 10);
strcpy(&TmpFileName[i][len], string);
fp = fopen(TmpFileName[i], "wt");
fclose(fp);
}
}
//----------------------------------------
void DestroyNewFiles( int count)
{
for(int i=0; i<count; i++)
delete [] TmpFileName[i];
delete [] TmpFileName;
}
// نحوه استفاده
InitNewFiles( "c:\\1", "hu_", 10); // برای ایجاد فایل
DestroyNewFiles(10); در آخر کار اجرا کنید

SamaPic
دوشنبه 13 اردیبهشت 1389, 22:59 عصر
با سلام و تشكر از دوستان .
نه با استفاده از وكتور مدت زمان ايجاد فايل براي 2 به توان 20 فايل حدود 32 ثانيه است ، كدش هيچ مشكلي نداشته و بهينه شده مي باشد .
اما قصد من از تغيير برنامه ، افزايش سرعت اجراي برنامه با استفاده از آرايه است .
در حقيقت پروژه مي بايست براي حداكثر 2 به توان 15 فايل درست كار كند ، و هيچ گونه محدوديت زماني براي سرعت انجام اين كار وجود ندارد .
اما من مي خواستم عملكرد اين برنامه را بهبود بخشم . چون همانطور كه مي دانيد استفاده از وكتور ، سرعت اجراي برنامه را به شدت كاهش مي دهد .



فکر نکنم مشکل سرعت از وکتور باشه ممکنه سیستم شما مشکلی برایش پیش امده باشد.
نمونه زیر بدون استفاده از وکتور هاست


سرعت اين قطعه شما ، كمتر از برنامه ي بنده مي باشد .
آيا شيوه ي ديگري وجود ندارد .
با تشكر .
موفق باشيد .

tdkhakpur
سه شنبه 14 اردیبهشت 1389, 22:01 عصر
سرعت اين قطعه شما ، كمتر از برنامه ي بنده مي باشد .
آيا شيوه ي ديگري وجود ندارد .

خب وقتی شما مستقیما با هارد سرو کار دارید و میخواهید فایلی را داخلش ایجاد کنید بالاخره باید هزینه ای هر چند کوچک از نظر زمان را بدید ولی کد بالا سطح پایینترین کدهایی هست که بعد اسمبلی طراحی شده است - ولی قسمتی از سرعت ایجاد فایل و کار با منبع ذخیره به سرعت دستگاههای ذخیره سازی هم مربوط میشود.
باز اگر دوستان نکته های دیگری هم داشته باشند به درد من هم خواهد خورد.