Файл не обновляется при записи в него с помощью System.IO.Stream C # - PullRequest
0 голосов
/ 29 октября 2018

Я использую следующий код для записи длины byte[] val в конец файла, а затем пишу byte[] val сама

byte[] len = BitConverter.GetBytes((UInt16) val.Length);
int fileLen = (int)new FileInfo(filePath).Length;
using (Stream stream = File.OpenWrite(filePath))
{
    stream.Write(len, fileLen, 2);
    stream.Write(val, fileLen + 2, val.Length);
}

И я получаю эту ошибку в последней строке блока using:

Смещение и длина вышли за пределы массива или число больше чем количество элементов от индекса до конца источника коллекция.

Когда я проверяю файл, я вижу, что поток вообще не записал первые 2 байта, и это является причиной возникновения ошибки. Почему это происходит?

1 Ответ

0 голосов
/ 29 октября 2018

Причиной исключения является то, что вы предоставляете смещение там, где не должны, как говорится в сообщении об исключении.

При любой длине файла больше нуля первый Write() будет выдан, поскольку смещение плюс длина будут находиться за пределами len.

Параметр смещения обозначает смещение в байтовом массиве, которое в обоих случаях должно быть равно нулю, так как вы хотите записать весь массив:

stream.Write(len, 0, len.Length);
stream.Write(val, 0, val.Length);

Если вместо этого вы хотите добавить в конец файла, см. Добавление данных к существующему файлу в C # . Если вы хотите начать запись в другом месте, используйте Seek(), чтобы изменить позицию потока.

...