我在我的WCF服务中使用Ionic zip来解压缩'client'上传的文件。文件使用Ionic zip压缩。但是,有些情况下压缩文件被'损坏'。我的代码扫描了整个文件夹要查找压缩文件,因为它每次都拾取相同的“损坏的”压缩文件而抛出异常。这阻止了所有其他文件的处理。这是代码:
foreach (string filePath in Directory.GetFiles(ZippedFilesDestinationFolder))
{
using (ZipFile zip1 = ZipFile.Read(filePath))
{
foreach (ZipEntry e in zip1)
{
e.Extract(unpackdirectory, ExtractExistingFileAction.OverwriteSilently);
}
}
}
我想将损坏的文件移动到另一个文件夹并继续提取文件夹中的其他压缩文件。如何修改代码以实现此目的?
答案 0 :(得分:4)
它停止了所有其他文件,因为异常在循环中未处理,导致循环退出。在读取Zipped文件周围添加Try / Catch将允许文件失败但仍允许处理下一个文件。
foreach (string filePath in Directory.GetFiles(ZippedFilesDestinationFolder))
{
try
{
using (ZipFile zip1 = ZipFile.Read(filePath))
{
foreach (ZipEntry e in zip1)
{
e.Extract(unpackdirectory, ExtractExistingFileAction.OverwriteSilently);
}
}
}
catch(Exception ex)
{
/* Log ex here */
/* Move corrupt file */
}
}