У меня есть интересный сценарий, я надеюсь, что кто-то еще наткнулся. Я пытаюсь скопировать часть открытого FileStream для разделения файла streamin C# .Net 3.5. Используя приведенный ниже код, я прочитал 37 «кусков» из 4096 байт, но не смог прочитать последний «частичный кусок» из 3812 байтов.FileStream.Read not reading last 'chunk'
string filPath = "c:\aRatherSmallFileThatCouldBeQuiteLarge.log";
string tmpNam = Path.GetTempFileName();
using (FileStream wt = new FileStream(tmpNam, FileMode.Open, FileAccess.Write))
{
using (FileStream rd = new FileStream(filPath, FileMode.Open, FileAccess.Read))
{
long cutPosition = 65217;
int bytesRead;
int chunkSize = 4096;
byte[] buffer = new byte[chunkSize];
while ((bytesRead = rd.Read(buffer, 0, chunkSize)) != 0)
wt.Write(buffer, 0, bytesRead);
}
File.Copy(tmpNam, filPath, true);
}
File.Delete(tmpNam);
Ошибок не получено; окончательные 3812 байт просто не записываются в файл назначения, как ожидалось.
Это небольшой пример, но я намереваюсь использовать его для очень больших файлов ... поэтому решения, которые читают исходный файл в памяти, здесь небезопасны.
Спасибо @Cory, но они как раз на месте, чтобы передать намерение кода. В настоящее время я просто открываю файл tmp и замечаю, что он неполный. – Vic
Вы делаете что-то с 'cutPosition', которое мы не видим в приведенном выше примере? Вы не используете его здесь. –
Нет, на самом деле ваш первый комментарий был совершенно прав. Я ломался на линии до того, как поток записи закрылся ... и, таким образом, до того, как он станет последним флешем. Большое спасибо. Ответ принят. – Vic