D: как добавить файл в zip-архив?

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

Предыдущий вопрос касался извлечения данных из zip-архива. Но теперь мне нужен любой пример, который показывает, как добавить данные в zip-архив.

Есть 2 ситуации. 1. отдельный файл 2. тестовая строка типа: string foo = "qwerty"; Как отправить в zip?

в доке std.zip нашел метод addMember(ArchiveMember de);, но не понимаю, как передать ему данные.


person Dmitry Bubnenkov    schedule 06.04.2015    source источник


Ответы (1)


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

import std.file: write;
import std.string: representation;
import std.zip: ArchiveMember, ZipArchive;

void main()
{
    char[] contents = "This is my test data.\n".dup;

    // Create the archive.
    auto zip = new ZipArchive();

    // Create the archive entry
    ArchiveMember ae = new ArchiveMember();
    ae.name = "test.txt";
    ae.expandedData(contents.representation);

    // Add to the entry to the archive.
    zip.addMember(ae);

    // Build the archive. 
    void[] compressed_data = zip.build();

    // Write the archive data to a file.
    write("test.zip", compressed_data);
}

И это работает:

$ ./addzip
$ unzip test.zip
Archive:  test.zip
 extracting: test.txt                
$ cat test.txt
This is my test data.

В следующей версии Phobos в документации будут примеры, показывающие, как читать и записывать zip-файлы.

person David Eagen    schedule 08.04.2015