PDA

View Full Version : لیست فایلهای مرتب



ghasemloo
سه شنبه 24 تیر 1393, 16:55 عصر
:تشویق:سلام
خسته نباشید
من یه مشکل دارم اونم این که وقتی فایلهای داخل یک پوشه رو با دستور زیر می خونم و آدرسش رو داخل لیست باکسم می ریزم .
فایلها داخل لیست باکس مرتب نیستند....یعنی به اون صورت که ویندوز نشون میده نیستن
اینم بگم که اسم فایلهای من ترکیبی از حروف و اعداده
برای مثال
rt1
rt2
,....

foreach (FileInfo fi in dir.GetFiles())
{}


کمکم کنید مثل همیشه

ghasemloo
سه شنبه 24 تیر 1393, 19:02 عصر
کمک:افسرده:

abbas.oveissi
سه شنبه 24 تیر 1393, 19:49 عصر
منظورتون همچین کدی هست :
var listFiles = from file in Directory.GetFiles("D:\\") orderby file select file; foreach (var f in listFiles)
Console.WriteLine(f);

ghasemloo
سه شنبه 24 تیر 1393, 21:32 عصر
orderby file select file;
این چیه کار نمی کنه
ببینید من می خوام این طور که فایلها داخل ویندوز دیده میشن وارد بشن
یه مثال می زنم
ببینید مثلا فایلهای زیر به این صورت داخل ویندوز دیده می شن
txt1.txt
txt2.txt
txt3.txt
اما زمانی که با دستورforeach (FileInfo fi in dir.GetFiles())
{}
نام های فایل وارد لیست باکس میشه به این صورت دیده میشه
txt2.txt
txt3.txt
txt1.txt
ممنون

abbas.oveissi
سه شنبه 24 تیر 1393, 21:58 عصر
orderby file select file;
این چیه کار نمی کنه
ببینید من می خوام این طور که فایلها داخل ویندوز دیده میشن وارد بشن
یه مثال می زنم
ببینید مثلا فایلهای زیر به این صورت داخل ویندوز دیده می شن
txt1.txt
txt2.txt
txt3.txt
اما زمانی که با دستورforeach (FileInfo fi in dir.GetFiles())
{}
نام های فایل وارد لیست باکس میشه به این صورت دیده میشه
txt2.txt
txt3.txt
txt1.txt
ممنون
این دستورات Linq هستند،شاید چون دات نتی استفاده میکنید که linq رو پشتیبانی نمیکنه.ببینید این کار میکنه:
string[] listFiles = Directory.GetFiles("D:\\"); Array.Sort(listFiles);
foreach (var f in listFiles)
Console.WriteLine(f);
درواقع اومدم آرایه ای که GetFiles برگردونده رو با دستور Array.Sort مرتبش کردم.

ghasemloo
سه شنبه 24 تیر 1393, 22:08 عصر
جواب نمیده

ghasemloo
سه شنبه 24 تیر 1393, 22:12 عصر
این کدهای منه



folderBrowserDialog1.ShowDialog();
DirectoryInfo dir = new DirectoryInfo(folderBrowserDialog1.SelectedPath);


foreach (FileInfo fi in dir.GetFiles().OrderBy(F=>F.Name))
{


if (fi.Extension == ".jpg" || fi.Extension == ".jpeg" || fi.Extension == ".png" || fi.Extension == ".bmp" || fi.Extension == ".Jpg" || fi.Extension == ".Jpeg" || fi.Extension == ".Png" || fi.Extension == ".Bmp" || fi.Extension == ".JPG" || fi.Extension == ".JPEG" || fi.Extension == ".PNG" || fi.Extension == ".BMP")
{
listBox2.Items.Add(fi.FullName);
StreamReader sr = new StreamReader(fi.FullName);
string mystring = sr.ReadToEnd();
listBox1.Items.Add(mystring);

}
}
label1.Text = listBox1.Items.Count.ToString();
}

abbas.oveissi
سه شنبه 24 تیر 1393, 22:19 عصر
این کدهای منه



folderBrowserDialog1.ShowDialog();
DirectoryInfo dir = new DirectoryInfo(folderBrowserDialog1.SelectedPath);


foreach (FileInfo fi in dir.GetFiles().OrderBy(F=>F.Name))
{


if (fi.Extension == ".jpg" || fi.Extension == ".jpeg" || fi.Extension == ".png" || fi.Extension == ".bmp" || fi.Extension == ".Jpg" || fi.Extension == ".Jpeg" || fi.Extension == ".Png" || fi.Extension == ".Bmp" || fi.Extension == ".JPG" || fi.Extension == ".JPEG" || fi.Extension == ".PNG" || fi.Extension == ".BMP")
{
listBox2.Items.Add(fi.FullName);
StreamReader sr = new StreamReader(fi.FullName);
string mystring = sr.ReadToEnd();
listBox1.Items.Add(mystring);

}
}
label1.Text = listBox1.Items.Count.ToString();
}



خب الان این درست هست دیگه،مشکلی داره؟
راستی اینم OrderBy داره پس نباید اون Order منو هم خطا میداد.منم با اون کد کار این تابع رو انجام میدادم.جفتش برای Linq هست.

یک پیشنهاد هم دارم که کدت رو به این ساختار تغییر بده:
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
//iinjaa code haato benevis
}

ghasemloo
سه شنبه 24 تیر 1393, 22:52 عصر
خب همین دیگه لامصب کار نمیکنه

abbas.oveissi
چهارشنبه 25 تیر 1393, 01:24 صبح
خب همین دیگه لامصب کار نمیکنه
بابا درست کار میکنه،من دقیقا هم کد خودم و هم کد شما رو تست کردم.الان این عکس با کد شما هست :
121152