问题
I have to create two folders inside of a zip file that I create programmatically using ICSharpCode.SharZipLib.Zip
. I want to:
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;
}
}
How do I create a directory using ZipEntry
and how do then add files to the directory located inside of the Zip archive?
回答1:
I figured it out:
- You can simply do
new ZipEntry("Folder1/Archive.txt");
andnew ZipEntry("Folder2/Archive2.txt");
回答2:
The answer above will work for several scenarios, but it will not work when you want to add an empty folder to a zip file.
I sifted through the SharpZipLib code and found that the only thing you need to do to create a folder is a trailing "/" forward slash on the ZipEntry name.
Here's the code from the library:
public bool IsDirectory {
get {
int nameLength = name.Length;
bool result =
((nameLength > 0) &&
((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) ||
HasDosAttributes(16)
;
return result;
}
}
So, just create folders as though they are files with ZipEntry, and put a forward slash on the end. It works. I've tested it.
回答3:
The best solution at our project was to switch to the way better
https://dotnetzip.codeplex.com
https://github.com/haf/DotNetZip.Semverd
the methods are more straight forward to use
来源:https://stackoverflow.com/questions/18363187/how-do-you-add-a-folder-to-a-zip-archive-with-icsharpcode-sharpziplib