Как добавить папку в zip-архив с помощью ICSharpCode.SharpZipLib
Я должен создать две папки внутри zip-файла, который я создаю программно, используя ICSharpCode.SharZipLib.Zip
. Я хочу:
private void AddToZipStream(byte[] inputStream, ZipOutputStream zipStream, string fileName, string fileExtension)
{
var courseName = RemoveSpecialCharacters(fileName);
var m_Bytes = inputStream;
if ((m_Bytes != null) && (zipStream != null))
{
var newEntry = new ZipEntry(ZipEntry.CleanName(string.Concat(courseName, fileExtension)));
newEntry.DateTime = DateTime.Now;
newEntry.Size = m_Bytes.Length;
zipStream.PutNextEntry(newEntry);
zipStream.Write(m_Bytes, 0, m_Bytes.Length);
zipStream.CloseEntry();
zipStream.UseZip64 = UseZip64.Off;
}
}
как создать каталог с помощью ZipEntry
и как добавить файлы в каталог, расположенный внутри Zip архив?
3 ответов
Я понял это:
- вы можете просто сделать
new ZipEntry("Folder1/Archive.txt");
иnew ZipEntry("Folder2/Archive2.txt");
ответ выше будет работать для нескольких сценариев, но он не будет работать, когда вы хотите добавить пустую папку в zip-файл.
Я просмотрел код SharpZipLib и обнаружил, что единственное, что вам нужно сделать, чтобы создать папку, - это конечная косая черта "/" на имени ZipEntry.
вот код из библиотеки:
public bool IsDirectory {
get {
int nameLength = name.Length;
bool result =
((nameLength > 0) &&
((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\'))) ||
HasDosAttributes(16)
;
return result;
}
}
Итак, просто создайте папки, как будто они являются файлами с ZipEntry, и поместите косую черту в конце. Это работает. Я проверить его.
лучшим решением в нашем проекте было перейти на путь лучше
https://dotnetzip.codeplex.com
https://github.com/haf/DotNetZip.Semverd
методы более прямолинейны в использовании