如何在 C# 打开文件之前检测损坏的文件
How to detect a corrupted file before opening it in C#
我有一些文件已损坏,我想在打开文件之前检测哪个文件已损坏。我使用了 FileInfor class 但没用。
解决此问题的最简单方法是让您的程序在访问和编辑文件时有一个日志文件。通过跟踪这一点,如果程序过早退出,您可以轻松识别保存被中断。为此,您应该让程序在每次程序 完成 保存文件时添加一个新日志,而不是在保存之前。当程序尝试打开程序时,您可以检查文件最后一次编辑的时间,如果最后一次编辑时间晚于日志文件中记录的时间,则拒绝它。
当然这个系统只能在一台电脑上运行。还有其他实现方法,例如在文件末尾添加日志。如果日志不存在,那么您就知道该文件已损坏。敞开心扉接受更多的想法,并尝试想出更多的方法来解决这个问题。这只是一个例子。
1. 不幸的是,在渲染文件之前没有简单的方法来确定文件是否损坏。通常问题文件有一个正确的 header 所以损坏的真正原因是不同的。该文件包含一个引用 table,给出每个 object 从文件开头的确切字节偏移位置。所以最有可能损坏的文件有损坏的偏移量或者可能有一些 object 丢失。
确定文件是否损坏的最佳方法是使用该类型的专用库,如 PDF 文件库。有很多免费和商业的此类 .NET 库。您可以简单地尝试使用此类库之一加载文件。 iTextSharp
会是一个不错的选择。
2. 或者如果你愿意,你可以通过这个答案:
File Upload Virus Scanning(server side)
您可能需要解析文件的 header 字节并确保它满足文件的其余 body 内容。例如,
Reading image header info without loading the entire image
这就是您如何读取图像的 header 并在不打开图像的情况下获取图像大小的方法。以同样的方式,您应该查看所需的文件格式 header 并根据文件格式规则对其进行验证。这不是现成的解决方案,但可能会给您一个想法。
我有一些文件已损坏,我想在打开文件之前检测哪个文件已损坏。我使用了 FileInfor class 但没用。
解决此问题的最简单方法是让您的程序在访问和编辑文件时有一个日志文件。通过跟踪这一点,如果程序过早退出,您可以轻松识别保存被中断。为此,您应该让程序在每次程序 完成 保存文件时添加一个新日志,而不是在保存之前。当程序尝试打开程序时,您可以检查文件最后一次编辑的时间,如果最后一次编辑时间晚于日志文件中记录的时间,则拒绝它。
当然这个系统只能在一台电脑上运行。还有其他实现方法,例如在文件末尾添加日志。如果日志不存在,那么您就知道该文件已损坏。敞开心扉接受更多的想法,并尝试想出更多的方法来解决这个问题。这只是一个例子。
1. 不幸的是,在渲染文件之前没有简单的方法来确定文件是否损坏。通常问题文件有一个正确的 header 所以损坏的真正原因是不同的。该文件包含一个引用 table,给出每个 object 从文件开头的确切字节偏移位置。所以最有可能损坏的文件有损坏的偏移量或者可能有一些 object 丢失。
确定文件是否损坏的最佳方法是使用该类型的专用库,如 PDF 文件库。有很多免费和商业的此类 .NET 库。您可以简单地尝试使用此类库之一加载文件。 iTextSharp
会是一个不错的选择。
2. 或者如果你愿意,你可以通过这个答案: File Upload Virus Scanning(server side)
您可能需要解析文件的 header 字节并确保它满足文件的其余 body 内容。例如,
Reading image header info without loading the entire image 这就是您如何读取图像的 header 并在不打开图像的情况下获取图像大小的方法。以同样的方式,您应该查看所需的文件格式 header 并根据文件格式规则对其进行验证。这不是现成的解决方案,但可能会给您一个想法。