首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICSharpCode.SharpZipLib验证压缩文件

ICSharpCode.SharpZipLib验证压缩文件
EN

Stack Overflow用户
提问于 2012-03-03 04:12:06
回答 2查看 10.9K关注 0票数 8

使用C#的ICSharpCode.SharpZipLib,我如何验证传递的文件实际上是一个有效的压缩文件(而不是右键单击并重命名为.zip的文件)?

代码语言:javascript
复制
[HttpPost]
        public ActionResult Upload(HttpPostedFileBase fileData)
        {
                if (fileData != null && fileData.ContentLength > 0)
                {
                    if (Path.GetExtension(fileData.FileName) == ".zip")
                    {
                        var zipFile = Server.MapPath("~/Content/uploads/" + Path.GetFileName(fileData.FileName));
                        fileData.SaveAs(zipFile);

                        FileStream fs = System.IO.File.OpenRead(zipFile);
                        ZipFile zf = new ZipFile(fs);

                        foreach (ZipEntry zipEntry in zf)
                        {
                            if (zipEntry.Name.EndsWith(".htm") || zipEntry.Name.EndsWith(".html"))
                            {
                                 return Json(new { success = true });                             
                            }
                        }
                        fs.Close();
                        fs.Dispose();
                        System.IO.File.Delete(zipFile);
                    }
                    else
                    {
                        var fileName = Server.MapPath("~/Content/uploads/" + Path.GetFileName(fileData.FileName));
                        fileData.SaveAs(fileName);                           
                        return Json(new { success = true });
                    }
                }                    
                return Json(new { success = false });

    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-03 04:23:22

您可以使用ZipFile.TestArchive方法。下面是它在SharpZipLib中的声明方式

代码语言:javascript
复制
/// <summary>
/// Test an archive for integrity/validity
/// </summary>
/// <param name="testData">Perform low level data Crc check</param>
/// <returns>true if all tests pass, false otherwise</returns>
/// <remarks>Testing will terminate on the first error found.</remarks>
public bool TestArchive(bool testData)
{
    return TestArchive(testData, TestStrategy.FindFirstError, null);
}

使用示例:

代码语言:javascript
复制
ZipFile zipFile = new ZipFile("archive.zip");
Console.WriteLine("Archive validation result: {0}", zipFile.TestArchive(true));
票数 17
EN

Stack Overflow用户

发布于 2016-04-29 06:29:15

小心这一个。当我立即尝试重命名时,它在文件上创建了一个IOAccess错误,我必须添加一条using语句:

代码语言:javascript
复制
public static bool ValidateZipFile(string fileToTest)
{
    bool result;
    //Added using statement to fix IOAccess Blocking
    using (ICSharpCode.SharpZipLib.Zip.ZipFile zip = new ICSharpCode.SharpZipLib.Zip.ZipFile(fileToTest))
    {
        result = zip.TestArchive(true, TestStrategy.FindFirstError, null);
    }
    return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9539730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档