PDA

View Full Version : سوال: به دست اوردن مکان فایل



AlirezaRad
دوشنبه 07 فروردین 1391, 01:45 صبح
سلام
چه جوری میشه برنامه ای ساخت که:
فایل"example.txt" را پیداکنه و مسیر کامل اونو در یک لیبل نشون بده؟
ممنون

asadegha
دوشنبه 07 فروردین 1391, 02:02 صبح
string[] str = Directory.GetFiles("c:\\", "example.txt", SearchOption.AllDirectories);
comboBox1.Items.Clear();
foreach (string item in str)
{
comboBox1.Items.Add(item);
}

AlirezaRad
دوشنبه 07 فروردین 1391, 12:25 عصر
ممنون اگه درایو فایل رو هم نداشته باشیم چه جوریه؟

mhsmity
دوشنبه 07 فروردین 1391, 12:47 عصر
خوب فرض كن بخوايم تمام مسيرهاي داخل درايو c رو بگرديم
ببين برنامه خيلي سنگين مي شه.

فكر نكنم زياد روشتون كاربردي باشه ؟

rezarko
دوشنبه 07 فروردین 1391, 12:58 عصر
من میخوام یه برنامه بسازم که اسم هر فایلی رو وارد کردن مکان اون رو نشون بده
شاید کاربر ندونه که فایلی رو که میخواد پیدا کنه تو چه درایوی هست . به خاطر همین من میخوام فایل رو توی هر درایوی که باشه (C,D,E,...) پیدا کنه و ادرس اونو نشون بده.

Sirwan Afifi
دوشنبه 07 فروردین 1391, 14:01 عصر
http://stackoverflow.com/questions/1225294/c-sharp-find-a-file-within-all-possible-folders

rezarko
دوشنبه 07 فروردین 1391, 15:31 عصر
میشه یه کم بیشتر توضیح بدید؟
ممنون

Ali0Boy
دوشنبه 07 فروردین 1391, 15:59 عصر
ببین اگر اشتباه نکنم شما می خواهید یه برنامه مثل Everything-1.2.1.451a بسازید که هر اسمی رو کاربر زد در هر جا که می خواهد باشد پیدا کند.
اگر این برنامه رو شما دانلود کنید و اجرا کنید، برای بار اول زمانی طولانی بسته به فضای پر شده ی هارد شما رو بررسی می کند و داخل هر درایو یک فایل شامل ایندکس گذاری ها و نام های فایل ها و مسیرشون رو نگهداری می کند.
حال در اجرا های بعدی اون فایل ها را مشاهده می کند و با الگوریتمی(که هرچه سعی کردم به اون دست پیداکنم نتوانستم) خیلی سریع اون فایل ها رو بارگزاری و تست می کند و فایل های حذف شده را از حالت ایندکس گزاری و از داخل داده ها حذف می کند و فایل های جدید رو جایگزین می کند و داخل یک لیست به نمایش می گذارد و بالای اون یک textbox گذاشته هروقت شما حرفی وارد می کنین این لیست رو فیلتر می کند.
روش دریافت نام فایل ها و درایو ها هم به همان صورت هست که آقای asadegha گفتند. البته قبل از اون باید نام تمام درایو ها رو بدست بیاورید و همچنین دایرکتوری های موجود را ...
موفق باشید

Ali0Boy
دوشنبه 07 فروردین 1391, 16:06 عصر
var files1 = new List<string>();
//@Stan R. suggested an improvement to handle floppy drives...
//foreach (DriveInfo d in DriveInfo.GetDrives())
foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
{
files1.AddRange(Directory.GetFiles(d.RootDirectory .FullName, "example.exe", SearchOption.AllDirectories));
}

جناب آقای Sirwan Afifi (http://barnamenevis.org/member.php?36227-Sirwan-Afifi) اگر امکانش هست در مورد این کدی که لینک صفحه اش رو دادین یکم بیشتر توضیح دهید. مخصوصا دستور داخل foreach به چه صورت کار می کند؟

Ali0Boy
دوشنبه 07 فروردین 1391, 16:16 عصر
ممنون اگه درایو فایل رو هم نداشته باشیم چه جوریه؟
باسلام، دوست عزیز خیلی ساده می تونی لیست درایو ها رو با کد زیر بدست بیاری:


string[] drv = Environment.GetLogicalDrives();
string str = "";
comboBox1.Items.Clear();
foreach (string s in drv)
{
comboBox1.Items.Add(s);
}

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

Sirwan Afifi
دوشنبه 07 فروردین 1391, 16:58 عصر
var files1 = new List<string>();
//@Stan R. suggested an improvement to handle floppy drives...
//foreach (DriveInfo d in DriveInfo.GetDrives())
foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
{
files1.AddRange(Directory.GetFiles(d.RootDirectory .FullName, "example.exe", SearchOption.AllDirectories));
}

جناب آقای Sirwan Afifi (http://barnamenevis.org/member.php?36227-Sirwan-Afifi) اگر امکانش هست در مورد این کدی که لینک صفحه اش رو دادین یکم بیشتر توضیح دهید. مخصوصا دستور داخل foreach به چه صورت کار می کند؟

خوب مشخصه درایو های رو براتون انتخاب می کنه که بصورت Fixed باشن (Hard Drives)
البته به این صورت هم می تونید استفاده کنید :
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.DriveType == DriveType.Fixed)
{
files1.AddRange(Directory.GetFiles(drive.RootDirec tory.FullName, "example.exe", SearchOption.AllDirectories));
}
}

متغیر files1 هم یک لیست از نوع رشته ست. با استفاده از متد AddRange که پارامتر ورودیش از نوع آرایه ست Pattern مورد نظر رو بهش اضافه می کنیم.