Подскажите где я не правильно делаю

247
21 августа 2018, 20:50

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

Заранее спасибо за ответ.

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading;
namespace read_to_buffer
{
    class Program
    {
        private static int BUFFER_SIZE=1024*1024;
        static string outFile = @"d:\Test1.gz";
        private static string outdecompres = @"d:\Black WidowDecompress.m4a";
        private static string ErrorMessage;
        static void Main(string[] args)
        {
            var _path = @"d:\Black Widow.m4a";

         //   Queue<byte[]> bqQueue = Readd(_path);// просто очередь с частями файла
        //    Queue<byte[]>bqcompres=new Queue<byte[]>();// очередь компрессия

        //    int  count = bqQueue.Count;
        //    for (int i = 0; i < count; i++)
         //   {
       //         bqcompres.Enqueue(Compres(bqQueue.Dequeue()));
        //                   WriteFile(bqcompres.Dequeue());
         //   }

          Unpack(outFile, outdecompres);

            Console.ReadKey();
        }
        public static Queue<byte[]> Readd(string _path)
        {
            using (var fsSource = new FileStream(_path, FileMode.Open, FileAccess.Read))    {
                // читаю части файла
                int numBytesToRead = 1024*1024; 
                byte[] bytes = new byte[numBytesToRead];
                Queue<byte[]>qw=new Queue<byte[]>();
                int numBytesReaded;
                do
                {
                    int numBytesRead = 0;
                    numBytesReaded = fsSource.Read(bytes, numBytesRead, numBytesToRead);
                    if (numBytesReaded > 0)
                    {
                       qw.Enqueue(bytes);

                    }
                } while (numBytesReaded > 0);
                return qw;
            }




        }// чтение из файла и разбиенние на блоки
        public static byte[] Compres(byte[] inputData)// компрес
        {
            using (var compressIntoMs = new MemoryStream())
            {

                using (var gzs = new BufferedStream(new GZipStream(compressIntoMs,
                    CompressionMode.Compress), BUFFER_SIZE))
                {
                    gzs.Write(inputData, 0, inputData.Length);
                }
                return compressIntoMs.ToArray();
            }

        }

        public static bool Unpack(string originalFile, string unpackedFile)
        {
            GZipStream gzip = null;
            FileStream readStream = null;
            FileStream writeStream = null;
            try
            {
                readStream = new FileStream(originalFile, FileMode.Open);
                writeStream = new FileStream(unpackedFile, FileMode.Create);
                gzip = new GZipStream(readStream, CompressionMode.Decompress);
                int size = 1024*1024; //размер буфера для обмена между потоками
                byte[] unpackbuf = new byte[size]; //буфер                
                int count = 0; //для хранения фактически прочитанных байт
                //пишем распакованные данные по кускам
                do
                {
                    count = gzip.Read(unpackbuf, 0, size); //читаем кусками размером size
                    if (count > 0) //если данные есть
                    {
                        writeStream.Write(unpackbuf, 0, count); //пишем фактически 
                        //прочитанное кол-во байт
                    }
                } while (count > 0);
            }
            catch (Exception ex)
            {
                if (readStream != null) readStream.Close();
                if (writeStream != null) writeStream.Close();
                if (gzip != null) gzip.Close();
                ErrorMessage = ex.Message;
                return false;
            }
            gzip.Close();
            readStream.Close();
            writeStream.Close();
            return true;
        }

        public static void WriteFile(byte[] dataas)
        {
            var outStream = new FileStream(outFile, FileMode.Append, FileAccess.Write);

                int count = 1024*1024;
                int ofset = 0;
            do
            {
                outStream.Write(dataas,ofset,count);
            } while (ofset>0);




        }

    }
}
Answer 1

FileMode.Create - создает каждый раз новый файл.

FileMode.Append - создает файл, если его нет, или открывает существующий файл и идет в его конец.

var outStream = new FileStream(outFile, FileMode.Append, FileAccess.Write);
READ ALSO
Диалог с пользователем. Бот на C#

Диалог с пользователем. Бот на C#

в библиотеки на python pyTelegramBotAPI есть функция register_next_step_handler, которая позволяет перейти к следующей "ступени" диалога, как можно это реализовать...

198
Jump Point Search логика

Jump Point Search логика

Кто-нибудь пробовал внедрять JPS в Astar? не совсем понимаю логику, опишу пожалуй, как это понял, ознакомившись с теорией и на практике:

209
Не работает удаление через ExecuteNonQuery

Не работает удаление через ExecuteNonQuery

В коде есть следующий участок:

216
Сделать Builder exe

Сделать Builder exe

Имеется проект visual studio на C#, хочу сделать билдер, чтобы вводить некоторые данные, которые нужно изменить в коде и скомпилировать программу...

219