【发布时间】:2013-09-19 06:51:51
【问题描述】:
我目前有这个代码:
foreach (string file in openFileDialog1.FileNames)
{
String ExtractPath = Path.GetDirectoryName(file);
try
{
using (ZipFile zip = ZipFile.Read(file))
{
zip.ExtractProgress += ExtractProgress;
foreach (ZipEntry e in zip)
{
try
{
e.Extract(ExtractPath,ExtractExistingFileAction.OverwriteSilently); // true => overwrite existing files
}
catch
{
}
}
}
}
catch
{
}
}
这可以很好地同时提取一个或多个选定的 zip 文件。 但是我很困惑我应该如何为每个文件创建一个单独的目录并将每个文件放入创建的目录中。
例子:
用户选择 2 个 zip 文件进行解压。 这 2 个 zip 文件称为“A.zip”和“B.zip”
我想以编程方式将提取的文件放入它们自己的目录中,以便筛选它们以供进一步使用。
因此,将提取 zip 文件“A.zip”并将提取的文件放入名为“Unzipped A”的文件夹中,然后提取 zip 文件“B.zip”并将提取的文件放入文件夹中称为“解压 B”。
如果这令人困惑,我很抱歉。 非常感谢您的帮助。
好的,在使用和编辑了 MatteKarla 的 sn-ps 之后,我现在有了这个:
foreach (string file in openFileDialog1.FileNames)
{
string directory = Path.GetDirectoryName(file) + @"\Unzipped " + Path.GetFileNameWithoutExtension(file);
var GetFiles = Directory.GetFiles(directory, "*.txt", SearchOption.AllDirectories).Where(s => s.EndsWith(".txt"));
foreach (string text in GetFiles)
{
MessageBox.Show("Text found", "File");
}
}
这会在我创建的目录中搜索提取的文件以查找 .txt 文件,并且效果很好,我只是想知道这是正确的方法还是有更有效的方法?
【问题讨论】:
-
不熟悉,但是否需要获取 ZipEntry 的相对路径并将其与 ExtractPath 连接?
-
感谢您的回复,问题是,在“foreach(openfiledialog1.filenames 中的字符串文件)”循环中收集的任何信息都无法使用,因为我需要对提取的文件进行筛选在该循环之外完成。
-
您可以在提取时检查,ZipEntry 有一个
FileName属性。