Zip архив в zennoposter

Discussion in 'Вопросы и обсуждение' started by Nikitos, Feb 14, 2018.

  1. Nikitos

    Nikitos Client

    Joined:
    Sep 15, 2016
    Messages:
    38
    Likes Received:
    4
    Добрый день. У меня стоит задача, скачать zip архив, содержащий множество файлов, и достать из него всего один файл xml и добавить эти данные в таблицу. В принципе извлечение файлов из архива находил на форуме, но проблема в том что архив тяжелый, и в нем много файлов, и таких архивов много, поэтому необходимо еще предусмотреть удаление "использованных" архивов, и лишних файлов, извлеченных из архивов. А это уж больно геморойно, да нагрузка на машину, и время обработки данных.

    Так вот вопрос:
    неужели нельзя как то упростить эту процедуру ? Возможно ли извлечение из архива конкретного файла с последующим удалением? Может возможно избежать извлечения вовсе.
    Спасибо.
     
  2. Zymlex

    Zymlex Client

    Joined:
    Oct 24, 2016
    Messages:
    710
    Likes Received:
    315
    Добавить в GAC:
    System.IO.Compression.dll
    System.IO.Compression.FileSystem.dll

    Добавить в Using:
    using System;
    using System.IO;
    using System.IO.Compression;

    Cниппет:
    Code (C#):
    1. string zipPath = @"C:\test.zip"; // путь к архиву
    2. string targetFile = @"target.txt"; // целевой файл (только английское имя, иначе нужна перекодировка строки)
    3. string extractPath = @"D:\targetfolder\"; // куда распаковать
    4.  
    5. using (ZipArchive archive = ZipFile.OpenRead(zipPath))
    6. {
    7.    archive.GetEntry(targetFile).ExtractToFile(Path.Combine(extractPath, targetFile));
    8. }
    9.  
    10. File.Delete(@"D:\target.txt"); // удаление файла
    Не поможет в плане скорости, если архив непрерывный.

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

    Либо пробовать онлайн сервисы.
     
    Last edited: Feb 14, 2018
    Nikitos and budora like this.
  3. Nikitos

    Nikitos Client

    Joined:
    Sep 15, 2016
    Messages:
    38
    Likes Received:
    4
    Спасибо большое, это то что мне нужно. Но снеппет постоянно выдает ошибку, удалось только извлечь все содержимое из архива вот так: http://zennolab.com/discussion/thre...lja-v-proekte-bez-brauzera.24517/#post-169435 но это мою проблему не решает.

    Возникает еще вопрос, как спарсить содержимое архива, что найти нужный файл (имена нужных файлов всегда различно, постоянно только расширение файла - xml)
     
  4. Zymlex

    Zymlex Client

    Joined:
    Oct 24, 2016
    Messages:
    710
    Likes Received:
    315
    А какая ошибка? Правильно ли указаны пути? Существуют ли папки?

    Распаковать все xml файлы
    Code (C#):
    1. string zipPath = @"c:\example\start.zip";
    2. string extractPath = @"c:\example\extract";
    3.  
    4. using (ZipArchive archive = ZipFile.OpenRead(zipPath))
    5. {
    6.     foreach (ZipArchiveEntry entry in archive.Entries)
    7.     {
    8.         if (entry.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
    9.         {
    10.              entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
    11.         }
    12.     }
    13. }
    upd: Подправил.
     
    Last edited: Feb 16, 2018
    Nikitos likes this.
  5. Nikitos

    Nikitos Client

    Joined:
    Sep 15, 2016
    Messages:
    38
    Likes Received:
    4
    Code (text):
    1. string zipPath = @"D:\test.zip"; // путь к архиву
    2. string extractPath = @"D:\"; // куда распаковать
    3.  
    4. using (ZipArchive archive = ZipFile.OpenRead(zipPath))
    5. {
    6. foreach (ZipArchiveEntry entry in archive.Entries)
    7. {
    8. if (entry.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
    9. {
    10. entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
    11. }
    Да, все пути и папки соответствуют, в архив добавил два тестовых файла: один txt, другой xml
    15.02.jpg
    Ошибка: Компиляция кода Ошибка в действии "CS1513" ожидалась }". [Строка: 15, столбец: 2]
     
  6. ssXXXss

    ssXXXss Client

    Joined:
    Dec 23, 2014
    Messages:
    5,586
    Likes Received:
    1,453
    наверно так
    Code (csharp):
    1. string zipPath = @"D:\test.zip"; // путь к архиву
    2. string extractPath = @"D:\"; // куда распаковать
    3. using (ZipArchive archive = ZipFile.OpenRead(zipPath))
    4. {
    5.     foreach (ZipArchiveEntry entry in archive.Entries)
    6.     {
    7.         if (entry.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
    8.         {
    9.             entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
    10.         }
    11.     }
    12. }
     
    Zymlex likes this.

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)