Всем привет!
Копирую с сетевого ресурса архив. Как отразить процесс?
Сначала юзал вот такой метод:
...
int i = 0;
FileStream fin = new FileStream(source, FileMode.Open);
FileStream fout = new FileStream(destatntion, FileMode.Create);
progressBarCopy1.Maximum = Convert.ToInt32(fin.Length);
do
{
i = fin.ReadByte();
if (i != -1)
fout.WriteByte((byte)i);
//progressBarCopy1.Value = progressBarCopy1.Maximum - 1;
progressBarCopy1.PerformStep();
} while (i != -1);
fin.Close();
fout.Close();
return i;
....
progressBarCopy1 отображается, все ок, но с сетевой папки копируется почему то очень медленно, с провисаниями и иногда даже файлы битые приходят.
Копирую вот таким способом:
int array_length = (int)Math.Pow(2, 19);
byte[] dataArray = new byte[array_length];
using (FileStream fsread = new FileStream
(source, FileMode.Open, FileAccess.Read, FileShare.None, array_length))
{
progressBarCopy1.Maximum = Convert.ToInt32(fsread.Length);
using (BinaryReader bwread = new BinaryReader(fsread))
{
using (FileStream fswrite = new FileStream
(destination, FileMode.Create, FileAccess.Write, FileShare.None, array_length))
{
using (BinaryWriter bwwrite = new BinaryWriter(fswrite))
{
for (; ; )
{
progressBarCopy1.PerformStep();
int read = bwread.Read(dataArray, 0, array_length);
if (0 == read)
break;
bwwrite.Write(dataArray, 0, read);
}
}
}
}
}
все очень быстро копируется, но прогресс бар не идет
winforms Framework 3.5 , посему асинхронные методы не доступны