...

Упаковка вложений в архив

Тема в разделе "Разработчикам", создана пользователем Olga Nanotech, 4 фев 2019.

  1. Olga Nanotech

    Olga Nanotech New Member

    Может быть кто-то сталкивался и может помочь. Необходимо файлы, содержащиеся в контекстной переменной NewDoc упаковать в один архив и записать в контектсную переменную Archive. Раньше данный функционал не реализовывала, поэтому в коде возможно ошибки, вообщем-то он и не работает.

    Код:
    public virtual void AddArchive (Context context)
            {
                foreach (var element in context.NewDoc)
                {
                   
               
                    FileStream sourceFile = File.OpenRead(element.File.ContentFilePath);
                    FileStream destFile = File.OpenWrite(context.Archive.File.ContentFilePath);
    
                    GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);
    
                    try
                    {
                        int value = sourceFile.ReadByte();
                        while (value != -1)
                        {
                            compStream.WriteByte((byte)value);
                            value = sourceFile.ReadByte();
                        }
                    } finally
                    {
                        compStream.Dispose();
                    }
                }
               
               
            }
     
  2. Olga Nanotech

    Olga Nanotech New Member

    Немного поменяла код. Есть дву контекстные переменные : список файлов в NewDoc и пустой архив в Archive. После выполнения сценария в архив записываются данные (размер файла меняется). Но выпадает ошибка: Контрольная сумма файла не совпадает соригинальной . Как с этим справится? Подскажите, пожалуйста!
    Код:
    public virtual void AddArchive(Context context)
            {
                foreach (var element in context.NewDoc)
                { Compress(element.File.ContentFilePath, context.Archive.File.ContentFilePath);
    }
                context.NewDoc.Add(context.Archive);
              
            }
    public static void Compress(String fileSource, String fileDestination)
            {
                using (FileStream fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
                {
                    using (FileStream fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
                    {
                        using (GZipStream gzipStream = new GZipStream(fsOutput, CompressionMode.Compress))
                        {
                            Byte[] buffer = new Byte[fsInput.Length];
                            int h;
                            while ((h = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                gzipStream.Write(buffer, 0, h);
                            }
                        }
                    }
                }
            }
     

    Вложения:

Поделиться: