在文件夹中提取 Zip 文件
Extracting Zip File in a Folder
我想提取一个 zip 文件,它应该检查 zip 文件中是否有文件夹。如果是,它应该解压缩到与其中的文件夹名称相同的文件夹。如果不是,它应该采用 zipfolder 名称。
我的问题是,我总是遇到找不到路径的一部分的异常,但如果我打开 zip,文件就在那里。
我绝望了!
private void CreateZipContentFolder(string zipsPath, string destinationPath) {
Zips = Directory.GetFiles(zipsPath, "*.zip", SearchOption.TopDirectoryOnly).ToList();
if (Zips.Count != 0) {
MyLog.WriteToLog("Creating Folder of ZipFiles... From: " + zipsPath + " To: " + destinationPath, MyLog.Messages.Info);
foreach (string zip in Zips) {
FileInfo fileInfo = new FileInfo(zip);
string dirName = destinationPath + "\" + fileInfo.Name.Substring(0, fileInfo.Name.Length - 4);
using (ZipArchive archive = ZipFile.OpenRead(zip)) {
foreach (ZipArchiveEntry entry in archive.Entries) {
if (entry.FullName.EndsWith("/")) {
try {
ZipFile.ExtractToDirectory(zip, destinationPath);
} catch (IOException e) {
MyLog.WriteToLog(e.Message, MyLog.Messages.Error);
}
break;
} else if (new FileInfo(dirName).Exists == false) {
try {
Directory.CreateDirectory(dirName);
ZipFile.ExtractToDirectory(zip, dirName);
} catch (IOException e) {
MyLog.WriteToLog(e.Message, MyLog.Messages.Error);
}
break;
}
}
}
}
MyLog.WriteToLog("Created Temporary Folders", MyLog.Messages.Info);
} else { MyLog.WriteToLog("No Zips Found in: " + zipsPath, MyLog.Messages.Warning); }
}
更新:异常
System.IO.DirectoryNotFoundException 未处理
HResult=-2147024893
Message=找不到路径的一部分 'P:\Documents_UBS_AM\Projekte\DataCompare\New\package4\AssetPerformance.txt'。
来源=mscorlib
我已经对您的代码进行了一些测试,但之前 - 我已经进行了必要的重构。您的代码确实需要它。我删除了所有 "log" 行,但我认为 - 您会了解如何使用它。它应该可以工作,但是您使用了一些非常糟糕的解决方案来做一些简单的事情,这可能是您出现异常的原因。
private void CreateZipContentFolder(List<String> zips, string destinationPath)
{
if (zips.Any())
{
foreach (string zip in zips)
{
string dirName = Path.Combine(destinationPath, Path.GetFileNameWithoutExtension(zip));
using (ZipArchive archive = ZipFile.OpenRead(zip))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith("/"))
{
ZipFile.ExtractToDirectory(zip, destinationPath);
break;
}
else if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
ZipFile.ExtractToDirectory(zip, dirName);
break;
}
}
}
}
}
}
如果它不适合您,您能否提供类似 "files' tree" 的内容?
我想提取一个 zip 文件,它应该检查 zip 文件中是否有文件夹。如果是,它应该解压缩到与其中的文件夹名称相同的文件夹。如果不是,它应该采用 zipfolder 名称。
我的问题是,我总是遇到找不到路径的一部分的异常,但如果我打开 zip,文件就在那里。
我绝望了!
private void CreateZipContentFolder(string zipsPath, string destinationPath) {
Zips = Directory.GetFiles(zipsPath, "*.zip", SearchOption.TopDirectoryOnly).ToList();
if (Zips.Count != 0) {
MyLog.WriteToLog("Creating Folder of ZipFiles... From: " + zipsPath + " To: " + destinationPath, MyLog.Messages.Info);
foreach (string zip in Zips) {
FileInfo fileInfo = new FileInfo(zip);
string dirName = destinationPath + "\" + fileInfo.Name.Substring(0, fileInfo.Name.Length - 4);
using (ZipArchive archive = ZipFile.OpenRead(zip)) {
foreach (ZipArchiveEntry entry in archive.Entries) {
if (entry.FullName.EndsWith("/")) {
try {
ZipFile.ExtractToDirectory(zip, destinationPath);
} catch (IOException e) {
MyLog.WriteToLog(e.Message, MyLog.Messages.Error);
}
break;
} else if (new FileInfo(dirName).Exists == false) {
try {
Directory.CreateDirectory(dirName);
ZipFile.ExtractToDirectory(zip, dirName);
} catch (IOException e) {
MyLog.WriteToLog(e.Message, MyLog.Messages.Error);
}
break;
}
}
}
}
MyLog.WriteToLog("Created Temporary Folders", MyLog.Messages.Info);
} else { MyLog.WriteToLog("No Zips Found in: " + zipsPath, MyLog.Messages.Warning); }
}
更新:异常
System.IO.DirectoryNotFoundException 未处理 HResult=-2147024893
Message=找不到路径的一部分 'P:\Documents_UBS_AM\Projekte\DataCompare\New\package4\AssetPerformance.txt'。
来源=mscorlib
我已经对您的代码进行了一些测试,但之前 - 我已经进行了必要的重构。您的代码确实需要它。我删除了所有 "log" 行,但我认为 - 您会了解如何使用它。它应该可以工作,但是您使用了一些非常糟糕的解决方案来做一些简单的事情,这可能是您出现异常的原因。
private void CreateZipContentFolder(List<String> zips, string destinationPath)
{
if (zips.Any())
{
foreach (string zip in zips)
{
string dirName = Path.Combine(destinationPath, Path.GetFileNameWithoutExtension(zip));
using (ZipArchive archive = ZipFile.OpenRead(zip))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith("/"))
{
ZipFile.ExtractToDirectory(zip, destinationPath);
break;
}
else if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
ZipFile.ExtractToDirectory(zip, dirName);
break;
}
}
}
}
}
}
如果它不适合您,您能否提供类似 "files' tree" 的内容?