1

我在我的 WCF 服务中使用 Ionic zip 来解压缩由“客户端”上传的文件。这些文件是使用 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);
                }
            }
}

我想将损坏的文件移动到另一个文件夹并继续提取文件夹中的其他压缩文件。如何修改代码以实现此目的?

4

1 回答 1

4

它停止了所有其他文件,因为在循环中未处理异常,导致循环退出。在读取压缩文件周围添加 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 */
    }
}
于 2013-09-24T17:49:44.573 回答