ZipArchive是ZipArchiveEntries的集合,添加/删除"条目"非常有效.但似乎没有目录/嵌套"档案"的概念.理论上,该类与文件系统分离,因为您可以在内存流中完全创建存档.但是,如果要在归档中添加目录结构,则必须在条目名称前添加路径前缀.
问题:如何扩展ZipArchive以创建更好的界面来创建和管理目录?
例如,将文件添加到目录的当前方法是使用目录路径创建条目:
var entry = _archive.CreateEntry("directory/entryname");
Run Code Online (Sandbox Code Playgroud)
而沿着这些方面的东西对我来说似乎更好:
var directory = _archive.CreateDirectoryEntry("directory");
var entry = _directory.CreateEntry("entryname");
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码将文件添加到现有存档.运行时不会显示任何错误或异常,但也不会将任何文件添加到存档中.有什么想法吗?
using (FileStream fileStream = File.Open(archivePath, FileMode.Open, FileAccess.ReadWrite))
using (ZipOutputStream zipToWrite = new ZipOutputStream(fileStream))
{
zipToWrite.SetLevel(9);
using (FileStream newFileStream = File.OpenRead(sourceFiles[0]))
{
byte[] byteBuffer = new byte[newFileStream.Length - 1];
newFileStream.Read(byteBuffer, 0, byteBuffer.Length);
ZipEntry entry = new ZipEntry(sourceFiles[0]);
zipToWrite.PutNextEntry(entry);
zipToWrite.Write(byteBuffer, 0, byteBuffer.Length);
zipToWrite.CloseEntry();
zipToWrite.Close();
zipToWrite.Finish();
}
}
Run Code Online (Sandbox Code Playgroud) 首先,我想说我已经尝试寻找解决方案,我没有找到一个我不必解压缩,添加我的文件夹,然后再拉链.我没有使用任何第三方库.如果可能的话,我想使用system.io.compression来做这个...如果不是,我会使用dotnetzip作为我的最后手段.
TL;博士.我希望能够将包含文件的目录添加到已创建的zip文件中.这可以使用system.io.compression库吗?
编辑:
using (FileStream zipToOpen = new FileStream(zipfile, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("testFolder/");
}
}
Run Code Online (Sandbox Code Playgroud)
所以,使用这段代码我可以在里面创建一个文件夹,但它里面没有任何文件.我现在的问题是我是否必须再次运行此代码才能将我的源文件夹中的每个文件都放到zip文件夹中,或者有更好的方法吗?
我可以成功地将zip文件夹中的文件解压缩到一个文件夹中,但我不太确定如何获取这些文件并将它们添加到现有的zip文件中.我将它们提取到桌面上名为"mod"的目录中,然后我需要将它们添加到另一个zip文件中.救命?这是我的提取代码 -
ZipFile zip = ZipFile.Read(myZip);
zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently);
Run Code Online (Sandbox Code Playgroud)
感谢帮助,谢谢.
c# ×4
.net ×1
.net-4.5 ×1
add ×1
append ×1
archive ×1
compression ×1
dotnetzip ×1
sharpziplib ×1
zip ×1