Я не знаю почему, но моя загрузка по частям не работает. Первый прочитанный фрагмент, вероятно, правильный, но следующие фрагменты содержат только 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))
частей.
Что я делаю не так?