【问题标题】:How to detect a corrupted file before opening it in C# [closed]如何在 C# 中打开文件之前检测损坏的文件 [关闭]
【发布时间】:2015-03-10 05:41:19
【问题描述】:

我有一些文件已损坏,我想在打开之前检测哪个文件已损坏。我使用了 FileInfor 类但没用。

【问题讨论】:

  • 您尝试上传/下载哪种类型的文件?
  • 如何在不打开文件并查看文件的情况下检测损坏?
  • 目前尚不清楚您的意图是什么,但检查文件是否损坏的常用方法是获取原始文件的哈希值。当您通过下载获得它的副本时,您可以检查哈希以了解它是否仍然是同一个文件。
  • @Victor,它不是在上传或下载东西。我主要有 .pdf 、 .cgm 和 .mp4 三种类型的文件。是否有解决此问题的解决方案,不依赖于文件类型?
  • 嘿@Senavirathna,我已经给出了解决方案的链接;检查它是否有用

标签: c# file encryption io


【解决方案1】:

解决此问题的最简单方法是让您的程序在访问和编辑文件时有一个日志文件。通过跟踪这一点,如果程序过早退出,您可以轻松识别保存被中断。为此,您应该让程序每次完成保存文件时添加一个新日志,而不是在保存之前。当程序尝试打开程序时,您可以检查文件最后一次编辑的时间,如果最后一次编辑时间晚于日志文件中记录的时间,则拒绝它。

当然,这个系统只能在一台计算机上运行。还有其他方法可以实现这一点,例如在文件末尾添加日志。如果日志不存在,那么您就知道该文件已损坏。敞开心扉接受更多想法,并尝试想出更多解决此问题的方法。这只是一个例子。

【讨论】:

    【解决方案2】:

    1. 不幸的是,在渲染之前没有简单的方法来确定文件是否损坏。通常问题文件具有正确的标题,因此损坏的真正原因是不同的。该文件包含一个参考表,给出了每个对象从文件开头开始的确切字节偏移位置。所以最有可能损坏的文件有损坏的偏移量或可能缺少一些对象。

    确定文件已损坏的最佳方法是使用该类型的专用库,例如​​ PDF 文件库。 .NET 有很多免费和商业的此类库。您可以简单地尝试使用此类库之一加载文件。 iTextSharp 会是一个不错的选择。

    2. 或者,如果您愿意,您可以查看以下答案: File Upload Virus Scanning(server side)

    【讨论】:

      【解决方案3】:

      您可能需要解析文件的标头字节并确保它满足文件正文的其余内容。例如,

      Reading image header info without loading the entire image 这是您无需打开即可读取图像标题并获取图像大小的方法。以同样的方式,您应该查看所需的文件格式标题并根据文件格式规则对其进行验证。这不是现成的解决方案,但可能会给你一个想法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多