问题
what I'm trying to do is add a list of folders and files all to the root of my Zip file, using the Ionic Zip library (c#).
Here's what I have so far
string k = "B:/My Documents/Workspace";
private void button1_Click(object sender, EventArgs e)
{
using (ZipFile zip = new ZipFile())
{
//add directory, give it a name
zip.AddDirectory(k);
zip.Save("t.zip");
}
}
Now, I want my zip to be looking like this.
- t.zip
- Random Files and Folder
But it's looking like this.
- t.zip
- t (folder)
- Random files and folders
- t (folder)
Any help would be appreciated, Thank you.
回答1:
The default behavior of AddDirectory should add the contents of the directory to the root path in the zipfile, without creating a subdirectory.
There is a second overload of AddDirectory, which adds a parameter to specify what the path of the added files should be within the zipfile. But since you want the files to go into the root directory, this would just be an empty string.
zip.AddDirectory(k, "");
See this documentation for more info.
None of this explains where your subfolder is coming from. I suspect the problem is from something else in the code. It might be useful to run this in debug and see what 'k' equals when you call AddDirectory, or to print out all the "entries" in the zip.Entries collection.
回答2:
Try this
using (ZipFile zip = new ZipFile())
{
zip.AddFiles(sourcefiles, ""); //For saving things at root of your zip
foreach (DirectoryInfo objFile in objDir.GetDirectories())
{
zip.AddDirectory(objFile.FullName, objFile.Name); ///For saving subdirectories within zip
}
zip.Save(pathzipfile + ".zip");
}
回答3:
Why not try something like this:
foreach (var file in System.IO.Directory.GetFiles(k))
{
zip.AddFile(file);
}
To get the directories and files to an unlimited depth, combine that with a recursion method based on System.IO.Directory.GetDirectories("path")
- should be pretty straightforward methinks.
来源:https://stackoverflow.com/questions/13129141/add-folders-to-root-of-zip-using-ionic-zip-library