PDA

View Full Version : سوال: روش منطبق کردن جستجوی فایلها و ریختن آنها داخل گریدویو با ProgressBar



forodo
یک شنبه 15 دی 1392, 20:52 عصر
سلام
من فایلهای داخل کامپیوترم رو سرچ می کنم و داخل یک گریدویو لیست می کنم ولی خوب همونطور که می دونید زمان می بره و میخوام که یک ProgresBar در اونجا قرار بدم تا وقتی که کل سطرها پر میشه اون پروگرس بار منطبق با اون پر بشه.
می دونم که باید با Value پروگرس بار کار کنم ولی نمی دونم که بر چه اساسی باید مقدار بهش بدم تا وقی که پرشدن گریدویو تموم شد اون هم تموم بشه.
با تشکر

sagggad
یک شنبه 15 دی 1392, 21:34 عصر
سلام.
فکر کنم قاعده خاصی نداره...
آخه چیزی مشخص نیست...
بازم اساتید لطفا جواب بدن

maythamahmadi
یک شنبه 15 دی 1392, 21:37 عصر
تا اونجا که من میدونم background worker و تردها رو باید مطالعه کنی.

maythamahmadi
یک شنبه 15 دی 1392, 21:48 عصر
یه سر هم به cod projrct و msdn مایکروسافت بزن.

یه سری هم به این لینک بزن

http://support.microsoft.com/kb/323116

forodo
یک شنبه 15 دی 1392, 21:54 عصر
یه سر هم به cod projrct و msdn مایکروسافت بزن.

یه سری هم به این لینک بزن

http://support.microsoft.com/kb/323116
تشکر ولی این لینک رو هم تو سرچی که تو اینترنت کردم دیدم ولی به درد من نخورد.
کدپروجکت و ام اس دی ان که هیچ تا صفحه 3 google رو هم گشتم.

sagggad
یک شنبه 15 دی 1392, 22:01 عصر
دوستان لطفا سایت انگلیسی زیاد معرفی نکنید...

maythamahmadi
یک شنبه 15 دی 1392, 22:04 عصر
دوست من اگه بتونی تعدادفایل ها رو مشخص کنی و با یه حساب ساده میتونی زمان بندیشو بدست بیاری و اونو رو progress bar اعمال کنی.

forodo
یک شنبه 15 دی 1392, 22:16 عصر
یه شمارنده گذاشتم که هر فایل یا فولدری که پیدا می کنه یکی بهش اضافه بشه.
ولی وقتی که کار تموم می شه می فهمم که چندتا بوده.
اگه می دونستم زمان بندیشو درست می کردم.
تمام مشکل در ندونستن تعداد فایلها و فولدرهاست.

حالا اگه دقیقه دقیق هم نخوام با چه روشی می شه اینکاررو انجام داد؟

ordebehesht
یک شنبه 15 دی 1392, 22:36 عصر
سلام.
فکر کنم قاعده خاصی نداره...
آخه چیزی مشخص نیست...
بازم اساتید لطفا جواب بدن
منم همینظر رو دارم ولی ببین میتونی از خاصیت بافر استفاده کنی من یه جا دیدم یه همچین کاری کرده بود البته ماله خیلی وقتا پیشه

forodo
دوشنبه 16 دی 1392, 10:43 صبح
منم همینظر رو دارم ولی ببین میتونی از خاصیت بافر استفاده کنی من یه جا دیدم یه همچین کاری کرده بود البته ماله خیلی وقتا پیشه
چطوری از بافر استفاده کنم؟؟؟
توی خود ویندوز وقتی یک کلمه ای رو سرچ می کنی تو نوار آدرس یک پروگرس بار قرار داره که پر میشه و وقتی هم که سرچ تمام می شه یهویی اون پروگرس بار پر میشه. چطور این کار انجام میشه؟؟؟ با چه چیزی داره پروگرس بار رو پر می کنه؟؟؟

forodo
دوشنبه 16 دی 1392, 14:00 عصر
تابع زیر بوسیله پروگرس بار یک فایل رو کپی میکنه:

public void CopyFile(string FileSource, string FileDestination)
{
int NumRead;
long FileLength;
System.IO.FileStream From = new System.IO.FileStream(FileSource, System.IO.FileMode.Open);
System.IO.FileStream To = new System.IO.FileStream(FileDestination, System.IO.FileMode.CreateNew);
byte[] buffer = new byte[1024];
FileLength = From.Length;
progressBar1.Minimum = 0;
progressBar1.Maximum = (int)FileLength;
while (FileLength > 0)
{
System.IO.BinaryReader Reader = new System.IO.BinaryReader(From);
NumRead = Reader.Read(buffer, 0, 1024);
FileLength = FileLength - NumRead;
System.IO.BinaryWriter Writer = new System.IO.BinaryWriter(To);
Writer.Write(buffer, 0, NumRead);
progressBar1.Value = progressBar1.Value + NumRead;
Writer.Flush();
}
From.Close();
To.Close();
if (progressBar1.Value > 99)
{
progressBar1.Value = 0;
MessageBox.Show("Copy Finished successfuly");
}
}

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

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
{
// Get the subdirectories for the specified directory.
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
DirectoryInfo[] dirs = dir.GetDirectories();

if (!dir.Exists)
{
throw new DirectoryNotFoundException(
"Source directory does not exist or could not be found: "
+ sourceDirName);
}

// If the destination directory doesn't exist, create it.
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}

// Get the files in the directory and copy them to the new location.
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
string temppath = Path.Combine(destDirName, file.Name);
file.CopyTo(temppath, false);
}

// If copying subdirectories, copy them and their contents to new location.
if (copySubDirs)
{
foreach (DirectoryInfo subdir in dirs)
{
string temppath = Path.Combine(destDirName, subdir.Name);
DirectoryCopy(subdir.FullName, temppath, copySubDirs);
}
}
}

shahryari
دوشنبه 16 دی 1392, 15:58 عصر
سلام
من فایلهای داخل کامپیوترم رو سرچ می کنم و داخل یک گریدویو لیست می کنم ولی خوب همونطور که می دونید زمان می بره و میخوام که یک ProgresBar در اونجا قرار بدم تا وقتی که کل سطرها پر میشه اون پروگرس بار منطبق با اون پر بشه.
می دونم که باید با Value پروگرس بار کار کنم ولی نمی دونم که بر چه اساسی باید مقدار بهش بدم تا وقی که پرشدن گریدویو تموم شد اون هم تموم بشه.
با تشکر

سلام

private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog FB = new FolderBrowserDialog();
if (FB.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
dataGridView1.Rows.Clear();
progressBar1.Maximum = System.IO.Directory.GetFiles(FB.SelectedPath).Leng th;
progressBar1.Value = 0;
foreach (var item in System.IO.Directory.GetFiles(FB.SelectedPath ))
{
progressBar1.Value += 1;
dataGridView1.Rows.Add(item);
Application.DoEvents();
}
}
}

forodo
دوشنبه 16 دی 1392, 17:24 عصر
خیلی مردی.
دست گلت درد نکنه.
اول تعداد فولدرهایی که قرار نشون داده بشه رو پیدا می کنم و برابر progressBar1.Maximum قرار می دهم و بعدش دوباره فولدرهارو که داره سرچ می کنه پروگرس بار رو تغییر می دم.
درسته سرعت برنامه میاد پایین چون که داره دوبار عمل سرچ رو انجام می ده ولی قشنگه دوست دارم.
بازم ممنون.