Разбивка файла на блоки при помощью FileStream (.NET 3.5)

310
13 марта 2017, 08:03

Нигде не могу найти правильного подхода:

Есть FileStream для чтения произвольного файла (формат не важен).Он читает из файла блоки некоторого размера.

   string fileIn = "C:/data.000";
   string fileOut = "C:/data.rar.gz";
   byte[] buffer = new byte[10240000];
   using (FileStream fstream = File.OpenRead(fileIn))
   {
       while(fstream.Position < fstream.Length)
        {
           fstream.Read(buffer, 0, buffer.Length);
        }
   }

typeOf показывает что "fstream.Read(buffer,0,buffer.Length) возвращает System.int32 и равен 10240000, т.е. то значение, которое я задал в качестве размера буфера.

Каким образом получить объект типа(кусок файла), а не размер буфера?

UPD^^ пробую сделать вот так:

 private void Compress(string fileInput, string FileOut, Program.StopTrigger abortCheck)
        {
            using (Stream fs = new FileStream(fileInput,FileMode.Open,FileAccess.Read,FileShare.Read,10240000,true))
            using (Stream fd = new FileStream(FileOut,FileMode.OpenOrCreate,FileAccess.Write,FileShare.Write,10240000,true))
            {
                long dataPortionSize = fs.Length / 64;
                byte[] buffer = new byte[dataPortionSize];
                int nRead;
                for(int i =1; i == 64; i++)
                {
                    Thread th = new Thread(() =>
                    {
                        fs.Position = dataPortionSize*i-dataPortionSize;
                        using (GZipStream csStream = new GZipStream(fd, CompressionMode.Compress))
                        {
                            while ((nRead = fs.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                csStream.Write(buffer, 0, nRead);
                            }
                        } 
                    });
                    th.Start();
                } 
            }
}

Файл делится, считывается очень быстро, но никакого сжатия не происходит, записывать соответственно нечего.

Подскажите кто сталкивался с этим

Answer 1

Данные, считанные из файла, находятся в buffer по расположению от 0 (второй аргумент вызова fstream.Read до 0 + k, где k — число, возвращаемое вызовом fstream.Read (вы его не присваиваете никакой переменной, и оно тем самым теряется).

Обратите внимание, что вы при этом получаете просто набор байт. Интерпретация его как объекта какого-либо типа лежит на вас (и обычно производится при с использованием методов десериализации).

READ ALSO
Как в C# REST API сделать нестандартный метод

Как в C# REST API сделать нестандартный метод

У меня есть допустим контроллер студентов и контроллер группУ них есть методы Get Get(id) Post Put Delete

324
Отмена изменений в коллекции

Отмена изменений в коллекции

В программе используется простенький UserControl (модальное окно), в котором редактируется коллекция цветовых меток

282
Проблема с декодированием ответа от WebSocket. C#

Проблема с декодированием ответа от WebSocket. C#

Есть сервер на С# и клиент на скриптеДанные от сервера отправляются хорошо, а вот с приемом разобраться не могу

276
Xamarin videoView черный экран но звук идет

Xamarin videoView черный экран но звук идет

Звук идет а плеер черный

275