2015-01-22 2 views
0

Я хотел бы заархивировать несколько файлов в папке, однако мой код ниже работал, но он не застегивал файлы, и я не уверен, что происходит, когда он получает нулевое значение. Пожалуйста, посоветуйтеFilePath Not Getting Zip

private static string filepath = string.IsNullOrEmpty(ConfigurationManager.AppSettings["AConvert"]) 
    ? "" : ConfigurationManager.AppSettings["AConvert"]; 

static void Main(string[] args) 
{ 
    string zipFileName; 
    string fileExt; 

    try 
    { 
     fileExt = Path.GetExtension(filepath); 
     zipFileName = filepath.Replace(fileExt + DateTime.Now.ToString("MMyy"), ".zip"); 
     using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFileName))) 
     { 
      s.Password = "ABC123"; 
      s.SetLevel(4); // 0 - store only to 9 - means best compression 

      byte[] buffer = new byte[4096]; 

      ZipEntry entry = new ZipEntry(Path.GetFileName(filepath)); 
      entry.DateTime = DateTime.Now; 
      s.PutNextEntry(entry); 

      using (FileStream fs = File.OpenRead(filepath)) 
      { 
       int sourceBytes; 
       do 
       { 
        sourceBytes = fs.Read(buffer, 0, buffer.Length); 
        s.Write(buffer, 0, sourceBytes); 
       } while (sourceBytes > 0); 
      } 
      s.Finish(); 

      s.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Exception during processing {0}", ex); 
    } 
} 
+0

Есть ли ошибка/исключение? Что это? –

+0

ошибок нет, но FileExt был равен нулю. Это неправильно? –

+0

Вы получаете значение для пути к файлу при вводе функции? – stsur

ответ

0

ОК, ребята, его работа прямо сейчас. вот код, который я исправляю от Кьяртана. Спасибо

private static string filepath = string.IsNullOrEmpty(ConfigurationManager.AppSettings["AConvert"]) ? "" : ConfigurationManager.AppSettings["AConvert"]; 
    private static string ZipPath = string.IsNullOrEmpty(ConfigurationManager.AppSettings["PathZip"]) ? "" : ConfigurationManager.AppSettings["PathZip"]; 


    static void Main(string[] args) 
    { 

     var yourListOfFilePaths = Directory.GetFiles(filepath); 

     using (ZipFile zip = new ZipFile()) 
     { 
      foreach (string filePath in yourListOfFilePaths) 
      { 
       zip.AddFile(filePath); 
      } 
      zip.Save(ZipPath + "\\Batch" + DateTime.Now.ToString("ddmmyy") + ".zip"); 
     } 
1

Не уверен, что ваш вход здесь, но я подозреваю, что вы можете использовать Path.GetFileName() вместо Path.GetExtension.

В настоящее время вы получаете пустую строку, так как «D: \ Report» не имеет расширения.

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

Лично я бы порекомендовал вас взглянуть на dotnetzip library. Он имеет несколько блестяще простых способов создания zip-архивов и добавления файлов к нему. В вашем случае, в основном что-то вроде:

var yourListOfFilePaths = Directory.GetFiles(pathToYourDir); 

using (ZipFile zip = new ZipFile()) 
{ 
    foreach(string filePath in yourListOfFilePaths) 
    { 
     zip.AddFile(filePath); 
    } 
    zip.Save(pathToTargetDir + "\\MyZipFile.zip"); 
} 

PS: Вы можете найти более C# examples for DotNetZip here.

+0

Привет, я скачал dll и вставил его в ссылку, но его не показывает, что появляется zip-файл., Поскольку я устанавливаю zipfile zip = new zipfile()) с ошибкой –

+0

@JaydenNg Убедитесь, что у вас есть импортировал его с помощью 'using Ionic.Zip;' в верхней части вашего класса. – Kjartan

+0

это круто kjartan, спасибо .. Могу ли я узнать, где путь после zip? как я запускаю код его работы, но zip-файл ушел. Просьба сообщить –

Смежные вопросы