PDA

View Full Version : سوال: چگونگی محاسبه تعداد فایل ها و فولدر های داخل یک فولدر



Salar Ashgi
شنبه 23 شهریور 1387, 15:30 عصر
سلام به همه دوستان عزیز ، چطور میشه تعداد فایل ها و فولدر های داخل یک فولدر

را جداگانه محاسبه کرد ؟؟؟ ممنون و متشکر !!!

corona
شنبه 23 شهریور 1387, 17:39 عصر
برای اینکار میتونی از کلاسهای directory , directoryinfo استفاده کنی . اين كلاسها يك سري توابع استاتيك دارن كه به راحتي ميشه باهاشون كار كرد . مثلا برای دسترسی به تمام دایرکتوریهای داخل یک دایرکتوری


string[] sub = Directory.GetDirectories(txtdata.Text);
foreach (string s in sub)
Lstitem.Items.Add(s);


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

Salar Ashgi
شنبه 23 شهریور 1387, 18:57 عصر
برای اینکار میتونی از کلاسهای directory , directoryinfo استفاده کنی . اين كلاسها يك سري توابع استاتيك دارن كه به راحتي ميشه باهاشون كار كرد . مثلا برای دسترسی به تمام دایرکتوریهای داخل یک دایرکتوری


string[] sub = Directory.GetDirectories(txtdata.Text);
foreach (string s in sub)
Lstitem.Items.Add(s);


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

==========================================
ممنون از راهنمایی شما ، ولی من این روش ها را امتحان کردم ، ولی اونی که من میخوام ،

نیست ، ببینید مثلا من یه فولدر دارم که داخل اون تعدادی فایل و تعدادی فولدر دیگر است ،

و داخل این ساب فولدر ها تعدادی فایل ، حالا من میخوام در جستجوی تعداد فایل ها ، فولدر

اصلی ، تعداد همه فایل ها و فایل های ساب فولدر ها نشون داده بشه ؟؟!!!

Saeed_script
شنبه 23 شهریور 1387, 20:41 عصر
می تونید کد بالا رو به صورت یک تابع بزگشتی بنویسید و هر جا که فولدر بود ، برای آن فولدر دوباره تابع صدا زده شود...

corona
یک شنبه 24 شهریور 1387, 09:43 صبح
می تونید کد بالا رو به صورت یک تابع بزگشتی بنویسید و هر جا که فولدر بود ، برای آن فولدر دوباره تابع صدا زده شود...


راهی که شما بیان کردین کاملا درسته . ولی یک راه ساده تر هم وجو داره و اونم استفاده از تابع GetFiles هستش که 3تا اورلود شده داره و توی یکی از اون تابعهاش تابعی هستش که 3 تا پارامتر می گیره ، پارامتر اول مسیر دایرکتوری و نامش با هم ، پارامتر دوم یک رشته که پترن جستجوی شما رو مشخص می کنه ، یعنی اینکه شما دنبال چه فایلهایی می گردین ، مثلا اگه وارد کنید "*.txt " یعنی هر چی فایل تکست هست براتون پیدا کنه و پارامتر سوم یک enum هستش به نام SearchOption که با انتخاب مقدار AllDirectories از اون تمام فایلهای مجود در ساب دایرکتوریهای یک دایرکتوری رو هم برای شما بر می گردونه ( همون کاری که مد نظر شماست ) .

مثال :


string name, path;
path = string.Empty;
if (TxtFname.Text != string.Empty )
{
path = TxtFname.Text;
if (Directory.Exists(path))
{
string[] Files = Directory.GetFiles(path,"*.*",SearchOption.AllDirectories);
foreach (string s in Files)
LstFiles.Items.Add(s);
}
}


توی مثال بالا من یک تکست باکس دارم که توی اون مسیر دایرکتوری و نامش رو وارد می کنم و تمام فایلهای موجود در اون دایرکتوری و ساب دایرکتوریهاش رو در یک لیست باکس ، لیست می کنم . توجه کن که من در پارامتر دوم تابع Directory.GetFiles از چه پترنی استفاده کردم ، به دلخواه خودت می تونی عوضش کنی . اگه سوالی بود بازم در خدمتیم .

Salar Ashgi
یک شنبه 24 شهریور 1387, 13:45 عصر
راهی که شما بیان کردین کاملا درسته . ولی یک راه ساده تر هم وجو داره و اونم استفاده از تابع GetFiles هستش که 3تا اورلود شده داره و توی یکی از اون تابعهاش تابعی هستش که 3 تا پارامتر می گیره ، پارامتر اول مسیر دایرکتوری و نامش با هم ، پارامتر دوم یک رشته که پترن جستجوی شما رو مشخص می کنه ، یعنی اینکه شما دنبال چه فایلهایی می گردین ، مثلا اگه وارد کنید "*.txt " یعنی هر چی فایل تکست هست براتون پیدا کنه و پارامتر سوم یک enum هستش به نام SearchOption که با انتخاب مقدار AllDirectories از اون تمام فایلهای مجود در ساب دایرکتوریهای یک دایرکتوری رو هم برای شما بر می گردونه ( همون کاری که مد نظر شماست ) .

مثال :


string name, path;
path = string.Empty;
if (TxtFname.Text != string.Empty )
{
path = TxtFname.Text;
if (Directory.Exists(path))
{
string[] Files = Directory.GetFiles(path,"*.*",SearchOption.AllDirectories);
foreach (string s in Files)
LstFiles.Items.Add(s);
}
}


توی مثال بالا من یک تکست باکس دارم که توی اون مسیر دایرکتوری و نامش رو وارد می کنم و تمام فایلهای موجود در اون دایرکتوری و ساب دایرکتوریهاش رو در یک لیست باکس ، لیست می کنم . توجه کن که من در پارامتر دوم تابع Directory.GetFiles از چه پترنی استفاده کردم ، به دلخواه خودت می تونی عوضش کنی . اگه سوالی بود بازم در خدمتیم .

================================================== =

ممنون و متشکر از مثال کاربردی شما ، فقط یه مشکل اینه که من میخوام فولدر رو بشه

با یک Dialog مثل OpenFile Dialog انتخاب کرد ، و لازم نباشه دیگه آدرس اون رو در تکست

باکس نوشت ؟؟!!!

corona
یک شنبه 24 شهریور 1387, 16:06 عصر
ببين راستش من به اينم فكر كرىم كه با يك OpenFile Dialog بيام آدرس دایرکتوری رو بگیرم ولی مشکلی که هست اینه که توی این دایالوگ باید یک فایل رو انتخاب کنی و نمیشه یک دایرکتوری رو انتخاب کرد ولی خوب میشه اینطوری دورش زد که شما مثلا یک دایرکتوری اصلی داری که توی اون چند فایل و چند دایرکتوری دیگه که توش چند تا فایل دیگه هستش داری بیای از اون دارکتوری اصلیت توی OpenFile Dialog یک فایل رو انتخاب کنی و بعد توی برنامت آدرس روت اون فایل رو به دست بیاری که میشه هموم دایرکتوری اصلیت .ولی اگه توی دایرکتوری اصلیت فایلی نباشه و چند تا فولدر داخلش باشه این روش کار نمیکنه .

Smart User
یک شنبه 24 شهریور 1387, 21:12 عصر
از folderbrowserdialog استفاده کن. فقط شاخه ها رو نشون می ده



if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
}