Как включить файл .zip в сборку .net (C ++ - CLI)? - PullRequest
1 голос
/ 31 августа 2011

Можно ли включить файл .zip в качестве ресурса внутри сборки .net?и если да, как это делается и как получить к нему доступ?

Я думаю, этот может работать для доступа к данным там?Я использовал это раньше для доступа к изображениям, но, похоже, я вспомнил, что мне пришлось вручную повторно импортировать ресурс в Visual Studio, чтобы получить изменения.Можно ли включить .zip во время компиляции?

Редактировать (@Tejs)

Это доступные мне варианты, если щелкнуть правой кнопкой мыши ресурс:

First screen shot of options available Second screen shot of options available

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

Вам просто нужно пометить zip-файл как Embedded Resource в Build Action.http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx

1 голос
/ 01 сентября 2011

Хорошо, я нашел что-то, что, кажется, работает:

Шаг 1 - Вставить ZIP-файл

  • Щелкните правой кнопкой мыши по проекту и перейдите в свойства
  • Перейдите к Configuration Properties> Linker> Input
  • Добавьте путь к файлу .zip в свойство Embed Managed Resource File. Для моего первоначального теста я добавил $(ProjectDir)\ReadMe.zip, который был zip файла readme, который Visual Studio создает при создании нового проекта.

Шаг 2 - Извлеките ZIP-файл

Добавьте код для извлечения этого ZIP-файла:

        Reflection::Assembly^ a1 = Reflection::Assembly::GetExecutingAssembly();

        cli::array<String^>^ names = a1->GetManifestResourceNames();
        for each( String^ name in names )
        {
            IO::BinaryReader^ s1 = gcnew IO::BinaryReader(a1->GetManifestResourceStream(name)); 

            String^ fileName = "Extracted_"+name;
            IO::BinaryWriter^ sw = gcnew IO::BinaryWriter( IO::File::Open( fileName, IO::FileMode::Create ) );
            sw->Write(s1->ReadBytes(s1->BaseStream->Length));
            sw->Flush();
            sw->Close();
        }

Когда этот фрагмент запускается, каждый ZIP-файл, добавленный в манифест во время компиляции, волшебным образом появляется в том же каталоге, из которого была запущена программа. Я попытался изменить содержимое .zip и, конечно же, перекомпиляция добавляет измененный файл в исполняемый файл, и результат извлекается, как и ожидалось.

1 голос
/ 31 августа 2011

Посмотрите на источник библиотеки DotNetZip, который находится по адресу CodePlex . Они используют процесс предварительной сборки для сжатия файлов в файл .zip и встраивают его как ресурс в библиотеку для последующего доступа к нему (он содержит материал, необходимый для самораспаковывающихся архивов).

...