Я не знаю, почему, но моя загруженная загрузка не работает. Первый фрагмент, который читается, вероятно, прав, но следующие куски содержат только 0
.Почему этот код чтения кусков не работает?
/// <summary>
/// Gibt die Bytesequenz des angeforderten Chunks zurück
/// </summary>
/// <param name="chunkNumber">Die Position des Chunks im Array</param>
/// <returns>Die Bytesequenz des angeforderten Chunks</returns>
byte[] FileToChunk(int chunkNumber)
{
byte[] chunkBuffer = new byte[chunkSize];
FileStream fileStream = new
FileStream("C:\\Users\\Patrick\\Downloads\\Prog\\UnityAssets\\start.unitypackage"
, FileMode.Open
, FileAccess.Read
);
fileStream.Seek((chunkNumber - 1) * chunkSize, SeekOrigin.Begin);
while (fileStream.Read(chunkBuffer, 0, chunkBuffer.Length) > 0);
if ( fileStream.Position != fileStream.Length
&& fileStream.Position != fileStream.Position - 1
)
fileStream.Close();
return chunkBuffer;
}
Таким образом, количество фрагмента, который должен быть извлечен передаются в качестве аргумента, и с fileStream.Seek()
Я хочу позицию фрагмента, который задан. Как я уже сказал, первый вызов этого метода возвращает, вероятно, рабочий кусок, но все остальные вызовы возвращают Byte[]
- массивы, заполненные 0
. chunkSize
- 256 КБ (1024 * 256 байт), а файл, который я хочу прочитать, имеет размер ~ 11 МБ (= 11000 КБ), поэтому его необходимо разбить на (int)Math.Ceiling((double)(file.fileSize/chunkSize))
.
Что я делаю неправильно?