PDA

View Full Version : سوال: سرچ یک فولدر یا فایل خاص



NasimBamdad
پنج شنبه 21 دی 1391, 13:50 عصر
سلام .

من مدتی است که دنبال این سوال هست که چه طوری میشه مثلا بگیم در تمام درایو ها دنبال یک فولدر به نام AAA سرچ کرد؟

مسیر اون فولدر رو بهم بده و در نهایت اون فولدر رو با تمام محتویاتش و فایل ها و Sub Directory ها پاک کنم ؟

---------------------
سوال بعدیم این هست که چه طوری در تمام درایو ها دنبال یک پسوند خاص بگردیم ، اگه اون پسوند پیدا شد ، اون رو پاکش کنه .

مثلا .TXT . هرچی TXT در اون درایو ها هست پاک بشه

ممنونم

group45
پنج شنبه 21 دی 1391, 17:18 عصر
با سلام
به صفحه زیر بروید و نرم افزار پست 625 رو دانلود کنید. که توش دسترسی یه تمامی دایرکتوری های سیستم وجود دارد.

http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE/page32

danialafshari
پنج شنبه 21 دی 1391, 17:27 عصر
سلام

string[] files = System.IO.Directory.GetFiles(@"C:\");
foreach (string fileName in files)
{
listBox1.Items.Add(fileName.ToString());
}

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

morteza271
پنج شنبه 21 دی 1391, 17:37 عصر
سلام.
به این دو تابع زیر دقت کن :
private void FindFolder(string Drive, string FolderName)
{
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dir = new DirectoryInfo(str);
if (dir.Name == FolderName)
{
DeleteFolderData(str);
}
}
}

private void DeleteFolderData(string FolderPath)
{
string[] strFiles = System.IO.Directory.GetFiles(FolderPath);
foreach (string str in strFiles)
{
try
{
System.IO.File.Delete(str);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
string[] strDics = System.IO.Directory.GetDirectories(FolderPath);
foreach (string str in strDics)
{
DeleteFolderData(str);
System.IO.Directory.Delete(str);
}
System.IO.Directory.Delete(FolderPath);
}

تابع FindFolder را با پارامترهای اسم یه درایو و اسم فولدر مورد نظرتون فراخوانی کنید.
این خودش چک میکنه اگه فولدر مورد نظر داخل اون درایو بود تمام فایلها و فولدرهای داخل اون فولدر رو پاک میکنه. به این صورت :
FindFolder("D:\\", "Test");
موفق باشید

NasimBamdad
دوشنبه 02 بهمن 1391, 09:13 صبح
دوستان نظرتون در مورد این قطعه کد ها چیه ؟


string[] drives = Directory.GetLogicalDrives();

foreach (string str in drives)
{
var xxxPath = Path.Combine(str, "Ali");
if (Directory.Exists(xxxPath))
{
DirectoryInfo downloadedMessageInfo = new DirectoryInfo(xxxPath);

foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
File.SetAttributes(xxxPath, FileAttributes.Normal);
file.Delete();
}
foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories())
{
dir.Delete(true);
}
}


کد بالا میاد همه درایو ها رو می گرده و پوشه ای که اسمش Ali باشه رو پیدا می کنه و محتویاتش رو پاک می کنه . اما پوشه Ali باقی می مونه .

آیا راهی هست که خوده پوشه Ali رو هم پاک کرد ؟

NasimBamdad
دوشنبه 02 بهمن 1391, 09:41 صبح
و اینکه چه طوری میشه یک فایل مشخص رو حذف کرد ؟ مثلا

Ali.MSI

////////////////////////////////////

یک سوال دیگه . چه طوری میشه فایل هایی که مثلا بگیم CS. هستند رو پاک کنه . من از کد زیر استفاده می کنم


string[] drives = Directory.GetLogicalDrives();

foreach (string str in drives)
{
string[] files = Directory.GetFiles(str, "*.fdsnck",SearchOption.AllDirectories);

foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
}


اما مشکل این هست که وقتی به یکسری فولدر های خاص ویندوز می رسه Error میده و کارش رو انجام نمیده.

مثلا من گفتم فایل هایی که پسوند fdsnck. دارند رو پاک کن . در درایو E خودم یک پوشه ساختم و فایل هایی با پسوند fdsnck رو در اون قرار دادم .

اما وقتی کد رو اجرا می کنم این Error رو میده

عنوان خطا در پنجره VS اینه : System.UnauthorizedAccessException was unhandled


و Error اش اینه :


Access to the path 'C:\Documents and Settings\' is denied.

NasimBamdad
دوشنبه 02 بهمن 1391, 10:41 صبح
سلام.
به این دو تابع زیر دقت کن :
private void FindFolder(string Drive, string FolderName)
{
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dir = new DirectoryInfo(str);
if (dir.Name == FolderName)
{
DeleteFolderData(str);
}
}
}

private void DeleteFolderData(string FolderPath)
{
string[] strFiles = System.IO.Directory.GetFiles(FolderPath);
foreach (string str in strFiles)
{
try
{
System.IO.File.Delete(str);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
string[] strDics = System.IO.Directory.GetDirectories(FolderPath);
foreach (string str in strDics)
{
DeleteFolderData(str);
System.IO.Directory.Delete(str);
}
System.IO.Directory.Delete(FolderPath);
}

تابع FindFolder را با پارامترهای اسم یه درایو و اسم فولدر مورد نظرتون فراخوانی کنید.
این خودش چک میکنه اگه فولدر مورد نظر داخل اون درایو بود تمام فایلها و فولدرهای داخل اون فولدر رو پاک میکنه. به این صورت :
FindFolder("D:\\", "Test");
موفق باشید



آیا امکانش هست که بگیم Sub Folder ها رو هم بگرد ؟ این فقط میاد ROOT هر درایو رو می گرده

vaheeed
دوشنبه 02 بهمن 1391, 11:26 صبح
من پست های بالا رو کامل نخوندم ، کاری که خودم کردم واسه گشتن گفتم دایرکتوری ها و فایل ها رو بخونه دوباره بصورت بازگشتی فایل ها و دایرکتوری های داخل دایرکتوری اصلی رو خوندم

NasimBamdad
دوشنبه 02 بهمن 1391, 14:31 عصر
اینکه به صورت بازگشتی صدا زده بشه رو نمی فهمم و بلد نیستم .

میشه توضیح دید ؟ با مثال ؟

NasimBamdad
دوشنبه 02 بهمن 1391, 17:04 عصر
من دنبال 3 تا چیز می گردم که هرچی می کنم نمیشه .

اول اینکه بیاد یک پسوند مشخص رو پیدا و پاک کنه مثلا FFF.

دوم بیاد یک فولدر رو که اسم مثلا Ali رو داره پیدا کنه و پاک کنه فولدر رو

سوم بیاد یک فایل رو به اسم ali.msi رو پاک کنه


همه این 3 تا ، در کل سیستم سرچ شود ، در تمام درایو ها و فولدر ها و ساب فولدر ها و ...........

مثلا درایو C و بعد پوشه Program Fils . و هر پوشه دیگه ای که در اون درایو هست و بعدشم زیر پوشه های موجود . یعنی تمام پوشه های سیستم رو چک کنه

آجز شدم از بس گشتم ، انواع اقسام Error ها رو میده و خسته شدم

morteza271
دوشنبه 02 بهمن 1391, 19:16 عصر
سلام.

اول اینکه بیاد یک پسوند مشخص رو پیدا و پاک کنه مثلا FFF.

private void FindFile_Extension(string Drive, string Extension)
{
string[] strFiles = System.IO.Directory.GetFiles(Drive, Extension);
foreach (string str in strFiles)
{
File.Delete(str);
}
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dic = new DirectoryInfo(str);
FindFile_Extension(Drive + "\\" + dic.Name, Extension);
}
}


دوم بیاد یک فولدر رو که اسم مثلا Ali رو داره پیدا کنه و پاک کنه فولدر رو
private void FindFolder(string Drive, string FolderName)
{
try
{
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dir = new DirectoryInfo(str);
if (dir.Name == FolderName)
DeleteFolderData(str);
else
{
string Path = Drive + "\\" + dir.Name;
FindFolder(Path, FolderName);
}
}
}
catch { }
}

private void DeleteFolderData(string FolderPath)
{
string[] strFiles = System.IO.Directory.GetFiles(FolderPath);
foreach (string str in strFiles)
{
try
{
System.IO.File.Delete(str);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
string[] strDics = System.IO.Directory.GetDirectories(FolderPath);
foreach (string str in strDics)
{
DeleteFolderData(str);
}
System.IO.Directory.Delete(FolderPath);
}



سوم بیاد یک فایل رو به اسم ali.msi رو پاک کنه
private void FindFile(string Drive, string FileName)
{
string[] strFiles = System.IO.Directory.GetFiles(Drive);
foreach (string str in strFiles)
{
FileInfo file = new FileInfo(str);
if (file.Name == FileName)
file.Delete();
}
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dic = new DirectoryInfo(str);
FindFile_Extension(Drive + "\\" + dic.Name, FileName);
}
}

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

FindFile_Extension("D:\\", "*.txt");
FindFile("D:\\", "ali.txt");
FindFolder("D:\\", "Test");

موفق باشید.

NasimBamdad
سه شنبه 03 بهمن 1391, 15:35 عصر
سلام.


private void FindFile_Extension(string Drive, string Extension)
{
string[] strFiles = System.IO.Directory.GetFiles(Drive, Extension);
foreach (string str in strFiles)
{
File.Delete(str);
}
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dic = new DirectoryInfo(str);
FindFile_Extension(Drive + "\\" + dic.Name, Extension);
}
}


private void FindFolder(string Drive, string FolderName)
{
try
{
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dir = new DirectoryInfo(str);
if (dir.Name == FolderName)
DeleteFolderData(str);
else
{
string Path = Drive + "\\" + dir.Name;
FindFolder(Path, FolderName);
}
}
}
catch { }
}

private void DeleteFolderData(string FolderPath)
{
string[] strFiles = System.IO.Directory.GetFiles(FolderPath);
foreach (string str in strFiles)
{
try
{
System.IO.File.Delete(str);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
string[] strDics = System.IO.Directory.GetDirectories(FolderPath);
foreach (string str in strDics)
{
DeleteFolderData(str);
}
System.IO.Directory.Delete(FolderPath);
}



private void FindFile(string Drive, string FileName)
{
string[] strFiles = System.IO.Directory.GetFiles(Drive);
foreach (string str in strFiles)
{
FileInfo file = new FileInfo(str);
if (file.Name == FileName)
file.Delete();
}
string[] strDics = System.IO.Directory.GetDirectories(Drive);
foreach (string str in strDics)
{
DirectoryInfo dic = new DirectoryInfo(str);
FindFile_Extension(Drive + "\\" + dic.Name, FileName);
}
}

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

FindFile_Extension("D:\\", "*.txt");
FindFile("D:\\", "ali.txt");
FindFolder("D:\\", "Test");

موفق باشید.


مرسی مرتضی جان ، همه درست کار کرد و درست بود . واقعا ممنونم . .


حالا عزیز یه سوالی دارم ، چه طوری میشه یک Thread درست کرد و این کد ها رو هنگام فراخوانی در اون انجام داد که برنامه دچار هنگ نشه و اون در کنار بقیه کار ها انجام بشه ؟

مثلا می خواهم هنگام بالا اومدن Form1 این کار انجام بشه ( Form_Load )

morteza271
سه شنبه 03 بهمن 1391, 21:45 عصر
خواهش میکنم...
اینم یه نمونه برای اینکار :


private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(RemoveData));
th.Start();
}

private void RemoveData()
{
FindFile_Extension("D:\\", "*.txt");
FindFile("D:\\", "ali.txt");
FindFolder("D:\\", "Test");
}
موفق باشید