PDA

View Full Version : حذف یک فولدر به صورت یک جا



ho3ein.3ven
پنج شنبه 05 اردیبهشت 1392, 01:19 صبح
سلام

من می خوام یک فولدر رو با تمامی محتویاتش به صورت یک جا حذف کنم . چطور می تونم این کارو انجام بدم؟

aradrobo
پنج شنبه 05 اردیبهشت 1392, 05:04 صبح
سلام

من می خوام یک فولدر رو با تمامی محتویاتش به صورت یک جا حذف کنم . چطور می تونم این کارو انجام بدم؟

using System.IO;

Directory.Delete(@"C:\Users\talia\Desktop\New folder");

ho3ein.3ven
جمعه 06 اردیبهشت 1392, 00:35 صبح
تشکر از پاسخ شما.

این دستور فقط یک فولدر خالی رو پاک می کنه . فولدری که من می خوام پاک کنم حاوی کلی فایل.

اگر ممکنه در این زمینه راهنمایی کنید.

esafb52
جمعه 06 اردیبهشت 1392, 01:16 صبح
منظور دستومن این هست Directory.Delete(@"C:\Users\talia\Desktop\New folder",true);

mhsmity
جمعه 06 اردیبهشت 1392, 02:07 صبح
string[] files = System.IO.Directory.GetFiles(locatoin);
foreach (string file in files)
{
System.IO.File.Delete(file);
}
Directory.Delete(locatoin);

FastCode
جمعه 06 اردیبهشت 1392, 04:32 صبح
شاید با این پارامتر بتونید فکر کنید که این کار رو انجام دادید.ولی از نظر تئوری کاملا غیر ممکنه.حوصله ندارم توضیح بدم.اگر میخواهی بدونی چرا میتونی صفحه مربوط به NTFS در ویکیپدیا رو بخونی.فکر میکنم به اندازه کافی توضیح داده که File Descriptor ها چطوری ذخیره ویرایش و حذف میشن

ho3ein.3ven
جمعه 06 اردیبهشت 1392, 14:26 عصر
تشکر از همگی دوستان که پاسخ دادن . با true کردن پارامتر دوم مشکل حل شد . ولی چرا از نظر تئوری غیر ممکنه ؟
یعنی با این کار فایل ها حذف نمیشن ؟

FastCode
جمعه 06 اردیبهشت 1392, 17:06 عصر
تشکر از همگی دوستان که پاسخ دادن . با true کردن پارامتر دوم مشکل حل شد . ولی چرا از نظر تئوری غیر ممکنه ؟
یعنی با این کار فایل ها حذف نمیشن ؟
با این کار فایل ها حذف میشن ولی معمولا(همیشه) Transactional نیست.(مطالعه کنید اصول Consistency:ACID و مطالعه کنید TxF)
در فایل سیستم اگر دایرکتوری بدون حذف فایلهاش حذف بشه با checkdisk به عنوان خطا تشخیص داده میشه و فایلهاش بازیابی میشه.(با شماره Directory و نه اسم اولیه)

ho3ein.3ven
جمعه 06 اردیبهشت 1392, 17:25 عصر
خب با خود سیستم عامل هم که این کار انجام میشه . یعنی اونم کار اشتباهی انجام میده ؟

FastCode
جمعه 06 اردیبهشت 1392, 17:46 عصر
خب با خود سیستم عامل هم که این کار انجام میشه . یعنی اونم کار اشتباهی انجام میده ؟
این یعنی TxF رو نخوندید.

ho3ein.3ven
جمعه 06 اردیبهشت 1392, 19:17 عصر
دقیقا نمی دونم کجا رو بخونم

FastCode
جمعه 06 اردیبهشت 1392, 22:15 عصر
http://en.wikipedia.org/wiki/Transactional_NTFS
کاملا توضیح داده چرا و چطوری.
از KTM استفاده میکنه.سیستم جالبیه ولی یکی دو سال قبل به خاطر نداشتن مستندات کافی برای من غیر قابل استفاده بود.

ho3ein.3ven
چهارشنبه 18 اردیبهشت 1392, 21:43 عصر
سلام . دوستان این روش اشتباه :
Directory.Delete(@"C:\Users\talia\Desktop\New folder",true);
فایل ها رو به درستی حذف نمیکنه یعنی مثل خود سیستم عامل.
از دوستان کسی نظری داره ؟

CsharpNevisi
چهارشنبه 18 اردیبهشت 1392, 22:04 عصر
System.IO.Directori.Delete(@"C:\MHtestDir");

FastCode
چهارشنبه 18 اردیبهشت 1392, 22:36 عصر
ممکنه بگید چرا میخواهید یک دایرکتوری رو حذف کنید؟

ho3ein.3ven
چهارشنبه 18 اردیبهشت 1392, 23:54 عصر
System.IO.Directori.Delete(@"C:\MHtestDir");

directory :D
این کد فقط دایرکتوری خالی رو حذف می کنه.

ho3ein.3ven
چهارشنبه 18 اردیبهشت 1392, 23:56 عصر
ممکنه بگید چرا میخواهید یک دایرکتوری رو حذف کنید؟

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

_behnam_
پنج شنبه 19 اردیبهشت 1392, 02:12 صبح
سلام.
بفرمایید.
DirectoryInfo di = new DirectoryInfo(@"F:\path");
CleanDirectory(di);

private void CleanDirectory(DirectoryInfo di)
{
if (di == null)
return;

foreach (FileSystemInfo fsEntry in di.GetFileSystemInfos())
{
CleanDirectory(fsEntry as DirectoryInfo);
fsEntry.Delete();
}
WaitForDirectoryToBecomeEmpty(di);
}

private void WaitForDirectoryToBecomeEmpty(DirectoryInfo di)
{
for (int i = 0; i < 5; i++)
{
if (di.GetFileSystemInfos().Length == 0)
return;
Console.WriteLine(di.FullName + i);
Thread.Sleep(50 * i);
}
}

Mahmoud.Afrad
پنج شنبه 19 اردیبهشت 1392, 02:28 صبح
من دارم رو یه پروژه کار می کنم که تو مسیر برنامه یک سری اطلاعات رو ذخیره می کنه و مدام باید اون فایل ها رو پاک کنه و فایل های جدید رو ذخیره کنه . وقتی فایل های قبلی رو پاک می کنه و بعد می خواد دوباره فایل ها رو ذخیره کنه اررور میده ولی وقتی که حذف با خود سیستم عامل انجام میشه برای ذخیره اطلاعات هیچ مشکلی نداره.
راهی که انتخاب کردید اشتباست. میبایست داده های جدید را روی فایلهای قبلی overwrite کنید.

FastCode
پنج شنبه 19 اردیبهشت 1392, 08:30 صبح
راهی که انتخاب کردید اشتباست. میبایست داده های جدید را روی فایلهای قبلی overwrite کنید.
و در یکد فایل دیتابیس کوچک مثل sqlite وضعیت overwrite رو نگهداری کنید که اگر وسطش قطع شد بتونید ادامه بدید.

ho3ein.3ven
پنج شنبه 19 اردیبهشت 1392, 11:23 صبح
سلام.
بفرمایید.
DirectoryInfo di = new DirectoryInfo(@"F:\path");
CleanDirectory(di);

private void CleanDirectory(DirectoryInfo di)
{
if (di == null)
return;

foreach (FileSystemInfo fsEntry in di.GetFileSystemInfos())
{
CleanDirectory(fsEntry as DirectoryInfo);
fsEntry.Delete();
}
WaitForDirectoryToBecomeEmpty(di);
}

private void WaitForDirectoryToBecomeEmpty(DirectoryInfo di)
{
for (int i = 0; i < 5; i++)
{
if (di.GetFileSystemInfos().Length == 0)
return;
Console.WriteLine(di.FullName + i);
Thread.Sleep(50 * i);
}
}

مممنون بهنام جان . ولی متاسفانه این روش هم جوابگو نیست .

ho3ein.3ven
پنج شنبه 19 اردیبهشت 1392, 11:24 صبح
و در یکد فایل دیتابیس کوچک مثل sqlite وضعیت overwrite رو نگهداری کنید که اگر وسطش قطع شد بتونید ادامه بدید.

ممکنه فایل هایی که می خوام ذخیره کنم با فایل های قبلی هم نام نباشه و یا ممکنه هم نام باشه . حتما باید فایل های قبلی پاک بشه و بعد فایل های جدید ذخیره شه.

FastCode
پنج شنبه 19 اردیبهشت 1392, 12:44 عصر
چرا لیست فایل ها رو نگهداری نمیکنید؟اینطوری برنامتون میتونی هر فایلی که در دیتابیس هست رو بخونه و جلوی خرابکاری توسط کاربر رو هم کمتر کنید.

ho3ein.3ven
پنج شنبه 19 اردیبهشت 1392, 13:15 عصر
اینجوری هم خیلی زمان میبره . اگه بشه همرو با هم حذف کرد بهتره.

FastCode
پنج شنبه 19 اردیبهشت 1392, 13:39 عصر
اتفاقا زمان کمتر میشه.
میتونید لیست رو نگهداری کنید و زمانی که لود سیستم پایینه فایل ها رو پاک کنید.

Mahmoud.Afrad
پنج شنبه 19 اردیبهشت 1392, 18:26 عصر
به نظرم اگر برنامه تون اجازه میده از همون sqlite برای ذخیره اطلاعات استفاده کنید بهتره. خودتونو درگیر فایل ها نکنید. در این حالت با رکوردها طرف هستید و حذف و اضافه و ...