PDA

View Full Version : DelteFile کار نمیکنه



taze kar
پنج شنبه 23 تیر 1384, 12:03 عصر
سلام
آقا ما هرچی با این تابع ور رفتیم که باهاش یه فایل رو پاک کنیم نشد که نشد .
باید کار خاصی رو قبل از فراخوانی این تابع انجام بدیم یا ....

پیشا پیش از راهنماییتون ممنونم .

sh_roohani
پنج شنبه 23 تیر 1384, 12:41 عصر
آقا تابع هیچ مشکلی نداره. مثال

DeleteFile("c:\\123.txt");

taze kar
پنج شنبه 23 تیر 1384, 16:25 عصر
به جان خودم منم همین کار رو انجام میدم!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !
ولی جواب نمیده

Blaster
پنج شنبه 23 تیر 1384, 17:10 عصر
اگه از اون تابع به همون شکلی که توی تاپیک نوشتی استفاده کنی ، معلومه که جواب نمیده!

taze kar
پنج شنبه 23 تیر 1384, 18:05 عصر
واسه چی ؟
تازه یه چیز جالب : فایل های کم حجم رو پاک میکنه و اون هایی که زیادن رو نه .:گیج:
و شماره ارور ش هم 5 میده . :خداییش پکیدم از بس که جواب نداد .

sh_roohani
شنبه 25 تیر 1384, 09:22 صبح
تازه جان،
شماره خطای 5 رو اگه تو ErrorLookup نگاه کنی، Access is denied هست. شاید وقتی DeleteFile رو برای فایلهای بزرگ اجرا می کنی، اونا هنوز در حال استفاده توسط یه thread یا process دیگه هستن.
و یه چیز دیگه. البته جسارت نباشه ها! ولی یه بار دیگه چک کن ببین موقع کامپایل هیچ Warningی نمی گیری؟ منظورم اینه که تصادفا تو نوشتن مسیر فایل به جای دوتا بک اسلش (\\) از یه بک اسلش (\) استفاده کرده باشی.

taze kar
یک شنبه 26 تیر 1384, 12:01 عصر
به جان عزیز خودم :
1.مسیر رو صحیح وارد میکنم .
2.خوب مشکل اینه که ادرس هر فایلی رو که میدم همین جوری میشه .اون هایی که جدید میسازم رو هم Deleteمیکنه .:confy2:
از همه باحال تر این که تابع remove هم جواب نمیده

sh_roohani
یک شنبه 26 تیر 1384, 12:23 عصر
ببخشید متوجه نشدم. بالاخره با همه فایلها مشکل داره یا با اونایی که جدید می سازی درست کار می کنه؟
می شه سورسی رو که روش کار می کنی بفرستی؟ البته اگه سری نیست (-;

taze kar
دوشنبه 27 تیر 1384, 11:16 صبح
نه اوحی جون تو جون بخواه من واست میفرستم
void MyClass::Search(char Path[])
{
BOOL Chk = TRUE ;
HANDLE Handle ;
char Temp[1024] ;
char SearchPath[1024] ;
WIN32_FIND_DATA FindData ;
//################################################## ###
//################################################## ###
strcpy(SearchPath,Path);
strcat(SearchPath,"\\*.*");
Handle = FindFirstFile(SearchPath,&FindData);
if ( Handle == INVALID_HANDLE_VALUE )
return ;
while (Chk)
{
if ( FindData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
if (!(strcmp(".",FindData.cFileName) == 0 || strcmp("..",FindData.cFileName) == 0))
{
strcpy(Temp,Path);
strcat(Temp,"\\");
strcat(Temp,FindData.cFileName);
Search(Temp);
DeleteFolder(Temp);
}
}
else
{
strcpy(Temp,Path);
strcat(Temp,"\\");
strcat(Temp,FindData.cFileName);
DeleteFile(Temp);
}
Chk = FindNextFile(Handle,&FindData);
}
return ;
}

void MyClass::DeleteFolder(char Path[])
{
MessageBox(NULL,Path,"FOLDER",0);
RemoveDirectory(Path);
}

void MyClass::DeleteFile(char Path[])
{
MessageBox(NULL,Path,"FILE",0);
::DeleteFile(Path);
}
اقا این برنامه فولدر های خالی روDelete میکنه ولی باید تمام فایل های یه فولدر رو Deleteکنه بعد خود فولدر رو این کار رو انجام نمیده .
فایل های با حجم کم و اون هایی که تازه میسازم رو ترتیبشون رو میده .
مر30

sh_roohani
دوشنبه 27 تیر 1384, 12:45 عصر
تازه جان سلام،
بنده این کد شما رو امتحان کردم، همه چیز درسته الا اینکه یه اشکال منطقی وجود داره (البته عقل ناقص بنده اینطوری فکر میکنه!). شما شرط پایان Recursive رو گذاشتین اینکه اگه هیچ فایلی در دایرکتوری پیدا نشد برگرده. خوب دیگه اصلا به قسمت اجرای تابع DeleteFolder نمی رسه که بخواد فولدر خالی رو پاک کنه!
حالا اگه برداشت من اشتباه بوده بفرمایید تا بازم روی این کد کار کنم. شاید اشکال از جای دیگه ای باشه. در ضمن کد شما برای من که همه فایلها رو پاک کرد، گنده و کوچولو و پیر و جوون هم نداشت. فقط همونطور که عرض کردم، دایرکتوریهای خالی رو پاک نکرد.

taze kar
دوشنبه 27 تیر 1384, 19:18 عصر
ممنون روحی جون
از من دقیقا برعکس کار می کنه
شایداشکال از هاردی ویندوزی یا ...باشه .
حالا یه جوری ترتیبش رو میدم . ویندوز رو دوباره نصب میکنم شاید حل شد
Iقلبyou

sh_roohani
دوشنبه 27 تیر 1384, 19:59 عصر
تازه جان اون چیزی رو که گفتم چک کردی؟ شرط خروج از Recursive رو می گم.

taze kar
سه شنبه 28 تیر 1384, 09:54 صبح
اره اکشالش حل شد ولی سیستم همسایمون یاور درایو اخرش استاد شد.

sh_roohani
سه شنبه 28 تیر 1384, 10:00 صبح
ایول،
اونم زیاد مهم نیست. یاور خودش استاد نشه!