3 回答

TA貢獻(xiàn)1111條經(jīng)驗 獲得超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");

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊
我嘗試使用此處列出的幻數(shù),但例如,如果我將 .msi 的擴(kuò)展名更改為 .xls,則該文件將被識別為 .xls...以下代碼說明了我所說的內(nèi)容:
是的,確實如此,您在檢查文件簽名時唯一可以確定的是文件所基于的格式。因此,對于“.xls”文件,您將檢測到該文件是復(fù)合二進(jìn)制格式。但是,正如您注意到的,此格式用于“.msi”文件,也用于“.doc”、“.ppt”等。
此外,您的“.xlsx”檢測也是如此,它只是檢查文件是否為 zip 格式,并且在“.zip”、“.docx”、“.ods”等中會找到相同的簽名.
因此,您可以檢查文件的簽名并通過這兩種格式的文件,但是“.csv”呢?在這里,您可以擁有各種字節(jié)值,因為它只是一個純文本,沒有簽名。
無論如何,我認(rèn)為真正的問題是您使用這些 Excel 文件的目標(biāo)是什么?你需要進(jìn)一步處理它們還是什么?
如果您需要進(jìn)一步處理它們,那么您應(yīng)該依賴讀取該文件的失敗機(jī)制。因此,無論您選擇讀取文件的哪個庫,都很可能會因為文件的“無法識別的格式”或“無法識別的結(jié)構(gòu)”而引發(fā)異常。
我所說的“無法識別的結(jié)構(gòu)”是什么意思,例如在“.xls”文件中,它應(yīng)該有名為“Workbook”、“SummaryInformation”等的流。

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊
文件本身就是數(shù)據(jù)。文件擴(kuò)展名允許您的系統(tǒng)相應(yīng)地解釋該數(shù)據(jù)。如果沒有文件擴(kuò)展名,就無法絕對確定您正在查看哪種文件類型。(除非您使用的是有限的文件類型子集)
但是,您可以從數(shù)據(jù)中推斷出它可能是哪個文件擴(kuò)展名。Thierry V 引用的項目已過時且未維護(hù)。
相反,您可能想要查看像TrID這樣的工具,它使用不斷增長的文件類型庫。此工具將分析文件并給出最可能的文件類型的排名。就像我之前說的,它只能以有限的確定性告訴您它可能是哪種文件類型。
- 3 回答
- 0 關(guān)注
- 284 瀏覽
添加回答
舉報