2015-07-08 3 views
0

У меня есть код сжатия папок/файлов:C# sevenzipsharp- добавление папки в новый/существующий архив

 SevenZipCompressor compressor = new SevenZipCompressor(); 

       foreach (string listBoxItem in listBoxToCompress.Items) 
       { 
        string choosenPath = listBoxItem; 

        int fileCount = Directory.GetFiles(listBoxItem).Length; 
        int folderCount = Directory.GetDirectories(listBoxItem).Length; 

        if (fileCount == 0 && folderCount == 0) 
        { 
         MessageBox.Show("folder " + listBoxItem + " is empty"); 
        } 
        else 
        { 
         listBox1.Items.Add("========================================"); 
         listBox1.Items.Add("Compressing. "+listBoxItem+" Wait..."); 
         listBox1.Refresh(); 
         if (File.Exists(zipFile) == true) 
         { 
          compressor.CompressionMode = CompressionMode.Append; 
          compressor.ArchiveFormat = OutArchiveFormat.Zip; 
          compressor.CompressDirectory(choosenPath, zipFile);    
          ++done; 
         } 
         else 
         { 
          compressor.CompressionMode = CompressionMode.Create; 
          compressor.ArchiveFormat = OutArchiveFormat.Zip; 
          compressor.CompressDirectory(choosenPath, zipFile);    
          ++done; 
         } 
         listBox1.Items.Add("Done."); 
         listBox1.Refresh(); 
        } 
       } 

Как Вы можете видеть, я везу папки из списка. Напр. Я добавляю некоторые папки сжать до одного file.zip так что мой ListBox это выглядит следующим образом:

+c:/test 
+d:/somefolder 

полная структура:

+c:/test 
|--c:/test/testfile.exe 
|--c:/test/testfolder 

d:/somefolder 
|--d:/somefile.exe 

Но теперь, после сжатия, мой архив выглядит следующим образом:

+archive.zip 
|--testfile.exe 
|--testfolder 
|--somefile.exe 

Как создать эту папку переопределения. Я хочу, чтобы архив выглядит следующим образом:

+archive.zip 
|-test 
    |----testfile.exe 
    |----testfolder 
|-somefolder 
    |----somefile.exe 

ответ

1

Ну ... я должен добавить эту строку:

compressor.PreserveDirectoryRoot = true; 

Этой опция отключена по умолчанию, после того, как разрешающая проблема решена волшебно :)