PDA

View Full Version : جستجوی فایل در یک درایو



amirrr3
جمعه 04 بهمن 1392, 16:54 عصر
سلام دوستان
اگه بخوام مثلا فایل های mp3 یه درایو رو جستجو کنم باید چیکار کنم ؟
با دستور GetFiles که سرچ میکنم وقتی به پوشه های سیستمی می رسه برنامه متوقف میشه
تازه فایل هایی که تو پوشه های ReadOnly هست رو جستجو نمی کنه
کلا واسه جستجوی یه فایل با پسوند خاص آیا روش خاصی وجود داره؟

forodo
جمعه 04 بهمن 1392, 17:33 عصر
سلام

try
{
foreach (string MP3Files in Directory.GetFiles(@"E:\", "*.mp3", SearchOption.AllDirectories))
{
listbox1.Add(Path.GetFileName(MP3Files));
}
}
catch (Exception)
{

}

amirrr3
شنبه 05 بهمن 1392, 00:14 صبح
سلام

try
{
foreach (string MP3Files in Directory.GetFiles(@"E:\", "*.mp3", SearchOption.AllDirectories))
{
listbox1.Add(Path.GetFileName(MP3Files));
}
}
catch (Exception)
{

}


دوست عزیز من دقیقا همین کد رو نوشته بودم ولی متاسفانه جواب نمیده چون پوشه هایی مثل $RECYCLE.BIN مانع اجرای صحیح برنامه میشن
می خواستم بپرسم راهی هست که برنامه از گشتن این پوشه ها صرف نظر کنه؟

forodo
شنبه 05 بهمن 1392, 05:41 صبح
خوب می تونی یه if بذاری که اگه :

foreach (string MP3Files in Directory.GetFiles(@"E:\", "*.mp3", SearchOption.AllDirectories))
{
if (Path.GetFileName(MP3Files)!= "$RECYCLE.BIN")
listbox1.Add(Path.GetFileName(MP3Files));
}

Mousavmousab
شنبه 05 بهمن 1392, 13:02 عصر
مشکل دوستمون اینه که به این صورت هم که بنویسی توی خط اول ارور میده ، با این حساب دیگه ربطی به شرط پیدا نمی کنه.


var files = Directory.GetFiles(@"E:\", "*.mp3", SearchOption.AllDirectories);

foreach (string MP3Files in files)
{
if (Path.GetFileName(MP3Files) != "$RECYCLE.BIN")
listBox1.Items.Add(Path.GetFileName(MP3Files));
}

forodo
شنبه 05 بهمن 1392, 14:04 عصر
یه راه غیرکدی هم هست.
همه فولدرها و فایلهات رو بریزی داخل یک فولدر و سرچ رو از اونجا انجام بدی.
مثلاً E:\New Folder
این یه پیشنهاد بود اگه راه حل پیدا نشد

forodo
شنبه 05 بهمن 1392, 14:14 عصر
اگه من جای شما بودم همون کاری رو که در پست قبل گفتم انجام می دادم ولی با کد زیر که خودم تست کردم و جواب داد کارتون راه می افته.
با روش پست قبلی ( راه غیرکدی ) به نظرم سریعتره. اینجا پوش و پاپ داریم که حالا من نمی دونم چقدر توی سرعت تأثیر داره ولی بالاخره بی تأثیر نیست. کار با فایل خودش کند هست دیگه کد اضافه هم بیویسیم که وا ویلا:قهقهه:
روش غیرکدی 3 خط و روش کدی نمی دونم نشمردم.:لبخند:
راستی اینم لینک (http://stackoverflow.com/questions/7541142/how-to-get-access-to-system-folders-when-enumerating-directories) جایی که کدهارو ازش *** رفتم.:متفکر:

private void button2_Click(object sender, EventArgs e)
{
// Create a stack of the directories to be processed.
Stack<DirectoryInfo> dirstack = new Stack<DirectoryInfo>();
// Add your initial directory to the stack.
dirstack.Push(new DirectoryInfo(@"E:\"));

// While there are directories on the stack to be processed...
while (dirstack.Count > 0)
{
// Set the current directory and remove it from the stack.
DirectoryInfo current = dirstack.Pop();

// Get all the directories in the current directory.
foreach (DirectoryInfo d in current.GetDirectories())
{
// Only add a directory to the stack if it is not a system directory.
if ((d.Attributes & FileAttributes.System) != FileAttributes.System)
{
dirstack.Push(d);
}
}

// Get all the files in the current directory.
foreach (FileInfo f in current.GetFiles())
{
if (f.Extension.ToLower() == ".mp3")
{
listBox1.Items.Add(f.Name);
}
}
}
}

forodo
شنبه 05 بهمن 1392, 14:36 عصر
اینطوری بنویس.
تست شده:

private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(@"E:\");
foreach (DirectoryInfo MP3Folders in di.GetDirectories())
{
if ((MP3Folders.Attributes & FileAttributes.System) != FileAttributes.System)
{
foreach (string MP3Files in Directory.GetFiles(@"E:\" + MP3Folders.ToString(), "*.mp3", SearchOption.AllDirectories))
{
listBox1.Items.Add(Path.GetFileName(MP3Files));
}
}
}
}

forodo
شنبه 05 بهمن 1392, 14:43 عصر
دوستان منظور از این تکه خط کد چیست؟
می گه اگه فولدر سیستمی نبود کارهارو انجام بده. ولی
تکه اول داخل پرانتز چیه؟
اون and چه نوع andie؟
تکه دوم داخل پرانتز چیه؟
چرا من & FileAttributes.System رو که پاک کردم باز اروره Access Denid زد؟

(MP3Folders.Attributes & FileAttributes.System) != FileAttributes.System

amirrr3
یک شنبه 06 بهمن 1392, 01:28 صبح
دوستان منظور از این تکه خط کد چیست؟
می گه اگه فولدر سیستمی نبود کارهارو انجام بده. ولی
تکه اول داخل پرانتز چیه؟
اون and چه نوع andie؟
تکه دوم داخل پرانتز چیه؟
چرا من & FileAttributes.System رو که پاک کردم باز اروره Access Denid زد؟

(MP3Folders.Attributes & FileAttributes.System) != FileAttributes.System

دوست عزیز مرسی
من گیر همین یه تیکه کد بودم


if ((MP3Folders.Attributes & FileAttributes.System) != FileAttributes.System)

الان دیگه بدون مشکل برنامه اجرا میشه
ولی منم مث شما نفهمیدم دقیقا کد چطور تعریف میشه و این and دقیقا چیکار می کنه اون وسط