PDA

View Full Version : سوال: نحوه نمایش پیشرفت کپی فایل با پروگرس بار



esafb52
سه شنبه 23 مهر 1392, 13:07 عصر
با سلام
من سرچ کردم و روشی رو هم پیدا کردم ولی روشی که بتونم از خود پروگرس بار ویژوال استدیو استفاده کنم ندیدم اگه دوستان راهنمایی کنند از چه کلاسی و چه خاصیتی استفاده کنم که بتونم حین کپی فایل پروپرس بار رو هم نمایش بدم ممنون میشم در ضمن کلا بعضی چیزی انگار طولشون مشخص نیست یا من باهشون مشکل دارم و نمیدونم از چه راهی باید استفاده کرد مثلا میخوایم زمان لود شدن یه جدول رو بصورت واقعی تو پروگرس بار به کاربر نمایش بدیم باید چکار کنیم
ممنون

barnamenevisjavan
سه شنبه 23 مهر 1392, 13:19 عصر
backgroundworker

esafb52
سه شنبه 23 مهر 1392, 13:25 عصر
دوست عزیز من کار با اون رو بلدم ولی بحث سر گرفتن یه پارامتری از فایل هستش و فرستادن اون به پروگرس بار

mohammadsamadi1377
سه شنبه 23 مهر 1392, 13:30 عصر
public static void CopyFile(string FileSource, string FileDestination, ProgressBar progressBar1)
{
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);
FileInfo aaaa = new FileInfo(FileSource);
Int64 a = aaaa.Length;
Int64 a1 = a /= 1000;
//MessageBox.Show(a1.ToString());
progressBar1.Maximum = int.Parse(a1.ToString());
progressBar1.Value = progressBar1.Value + (NumRead /= 1000);

Writer.Flush();
}
From.Close();
To.Close();
if (progressBar1.Value > 99)
{
progressBar1.Value = 0;
MessageBox.Show("Copy Finished successfuly");
}
}

plus
سه شنبه 23 مهر 1392, 13:32 عصر
نمیدونم ورژن های جدید دات نت امکان خاصی در این مورد دارن یا نه ولی در هر حال شما میتونی از CopyFileEx (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363852(v=vs.85).aspx) استفاده کنی.برای استفاده ازین API در #C اینجا (http://www.pinvoke.net/default.aspx/kernel32.CopyFileEx) رو ببینید.
البته، راه دیگه این هست که با استفاده از Stream، فایل رو به صورت دستی، بلاک بلاک از مبدا به مقصد جابجا کنید.

behnam-soft
سه شنبه 23 مهر 1392, 13:35 عصر
یه سر به تاپیک که من در این مورد فرستادم بزن:
http://barnamenevis.org/showthread.php?422761-%D9%86%D8%AD%D9%88%D9%87-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%88-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%D9%87%D8%A7%DB%8C-%D8%AD%D8%AC%DB%8C%D9%85-%D9%88-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A8%D8%A7-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%DB%8C%D9%BE%D9%88%D8%B1%D8%AA-%D8%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A8%DA%A9-%DA%AF%D8%B1%D8%A7%D9%86%D8%AF-%D9%88%D8%B1%DA%A9%D8%B1&p=1893398#post1893398

esafb52
سه شنبه 23 مهر 1392, 14:04 عصر
[QUOTE=mohammadsamadi1377;1896974]public static void CopyFile(string FileSource, string FileDestination, ProgressBar progressBar1)
{
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);
FileInfo aaaa = new FileInfo(FileSource);
Int64 a = aaaa.Length;
Int64 a1 = a /= 1000;
//MessageBox.Show(a1.ToString());
progressBar1.Maximum = int.Parse(a1.ToString());
progressBar1.Value = progressBar1.Value + (NumRead /= 1000);

Writer.Flush();
}
From.Close();
To.Close();
if (progressBar1.Value > 99)
{
progressBar1.Value = 0;
MessageBox.Show("Copy Finished successfuly");
}
}[/QUOTE

ممنون از دوستان چند وقتی بود ذهنم درگیرش بود که درست شد