Я пытаюсь разработать приложение, которое будет загружать большие файлы на веб-сервер под управлением PHP. Почти сразу, я наткнулся на проблему, что файл не разделить правильно.C# FileStream неправильно считывает байты
В настоящее время у меня есть этот кусок кода
string adrese = "c:\\directory\\file.jpg";
int garums = 16384;
String ext = Path.GetExtension(adrese);
FileStream file = /*/File.Open(adrese, FileMode.Open);/*/
new FileStream(adrese, FileMode.Open, System.IO.FileAccess.Read);
long fgar = file.Length; //100%
long counter = garums;
first = true;
byte[] chunk = new byte[garums];
while (true)
{
int index = 0;
//long Controll = counter+garums;
while (index < chunk.Length)
{
int bytesRead = file.Read(chunk, index, chunk.Length - index);
if (bytesRead == 0)
{
/*byte[] biti = new byte[index];
for (int i = 0; i < index; i++)
{
biti[i] = chunk[i];
}
chunk = new byte[index];
chunk = biti;*/
break;
}
index += bytesRead;
}
if (index != 0) // Our previous chunk may have been the last one
{
byte[] biti = new byte[index];
for (int i = 0; i < index; i++)
{
biti[i] = chunk[i];
}
chunk = new byte[index];
chunk = biti;
// index is the number of bytes in the chunk
sutam(Convert.ToBase64String(chunk),ext);
}
double procentuali = ((counter * 100)/fgar);
if (procentuali > 99)
{
procentuali = 100;
}
progressBar1.Value = (int)Math.Round(procentuali);
label1.Text = "" + procentuali;
counter = counter+garums;
if (index != garums) // We didn't read a full chunk: we're done
{
return;
}
}
file.Close();
Все работает, если я изложу garums
1, но кто будет ждать в течение года или около того, чтобы загрузить файл размером множественным GB-х.
Я был бы рад, если бы вы могли сказать мне, что не так, и как исправить это.
для spliting файла вы можете попробовать http://stackoverflow.com/questions/3967541/how-to-split-large-files-efficiently – Amitd
Параметр 3 FileStream :: Read - это количество байтов. У вас это как длина массива минус ваш текущий индекс. Разве это не просто длина массива? – Mike