3 回答
![?](http://img1.sycdn.imooc.com/54584d9f0001043b02200220-100-100.jpg)
TA贡献1111条经验 获得超0个赞
如果它不是 Excel 文件,如何通过EPPlusof打开文件 ExcelInterop并捕获异常
FileInfo fileInfo = new FileInfo(filePath);
ExcelPackage package = null;
try
{
package = new ExcelPackage(fileInfo);
}
catch(Exception exception)
{
}
或者有第三方(未测试)验证文件类型。
FileInfo file = new FileInfo("C:\Hello.pdf");
if ( file.isExcel())
Console.WriteLine("File is PDF");
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
TA贡献1825条经验 获得超6个赞
我尝试使用此处列出的幻数,但例如,如果我将 .msi 的扩展名更改为 .xls,则该文件将被识别为 .xls...以下代码说明了我所说的内容:
是的,确实如此,您在检查文件签名时唯一可以确定的是文件所基于的格式。因此,对于“.xls”文件,您将检测到该文件是复合二进制格式。但是,正如您注意到的,此格式用于“.msi”文件,也用于“.doc”、“.ppt”等。
此外,您的“.xlsx”检测也是如此,它只是检查文件是否为 zip 格式,并且在“.zip”、“.docx”、“.ods”等中会找到相同的签名.
因此,您可以检查文件的签名并通过这两种格式的文件,但是“.csv”呢?在这里,您可以拥有各种字节值,因为它只是一个纯文本,没有签名。
无论如何,我认为真正的问题是您使用这些 Excel 文件的目标是什么?你需要进一步处理它们还是什么?
如果您需要进一步处理它们,那么您应该依赖读取该文件的失败机制。因此,无论您选择读取文件的哪个库,都很可能会因为文件的“无法识别的格式”或“无法识别的结构”而引发异常。
我所说的“无法识别的结构”是什么意思,例如在“.xls”文件中,它应该有名为“Workbook”、“SummaryInformation”等的流。
- 3 回答
- 0 关注
- 247 浏览
添加回答
举报