第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取不使用文件擴(kuò)展名的文件類型 c#

獲取不使用文件擴(kuò)展名的文件類型 c#

C#
梵蒂岡之花 2021-12-25 18:29:51
我知道以前有人問過這個問題,但兩種解決方案都不適合我。我想知道上傳到我的服務(wù)器(通過 .ashx)的文件是 .xlsx、.xls 還是 .csv 類型。我嘗試使用此處列出的幻數(shù),但例如,如果我將 .msi 的擴(kuò)展名更改為 .xls,則該文件將被識別為 .xls...以下代碼說明了我所說的內(nèi)容:private bool IsValidFileType(HttpPostedFile file){    using (var memoryStream = new MemoryStream())    {        file.InputStream.CopyTo(memoryStream);        byte[] buffer = memoryStream.ToArray();        //Check exe and dll        if (buffer[0] == 0x4D && buffer[1] == 0x5A)        {            return false;        }        //Check xlsx        if (buffer.Length >= 3 &&            buffer[0] == 0x50 && buffer[1] == 0x4B &&            buffer[2] == 0x03 && buffer[3] == 0x04 ||            buffer[0] == 0x50 && buffer[1] == 0x4B &&            buffer[2] == 0x05 && buffer[3] == 0x06)        {            return true;        }        //Check xls        if (buffer.Length >= 7 &&            buffer[0] == 0xD0 && buffer[1] == 0xCF &&            buffer[2] == 0x11 && buffer[3] == 0xE0 &&            buffer[4] == 0xA1 && buffer[5] == 0xB1 &&            buffer[6] == 0x1A && buffer[7] == 0xE1)        {            return true;        }        return false;    }}然后我嘗試使用urlmon.dll,類似于以下內(nèi)容,但它仍然將文件識別為 .xls    [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)]    static extern int FindMimeFromData(        IntPtr pBC,        [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,        [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.I1, SizeParamIndex=3)] byte[] pBuffer,        int cbSize,        [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,        int dwMimeFlags,        out IntPtr ppwzMimeOut,        int dwReserved);我在想,也許我應(yīng)該嘗試使用一些庫(例如ExcelDataReader)打開上傳的文件,但我不確定這是否是最佳方法。任何幫助,將不勝感激。
查看完整描述

3 回答

?
catspeake

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");


查看完整回答
反對 回復(fù) 2021-12-25
?
胡子哥哥

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”等的流。


查看完整回答
反對 回復(fù) 2021-12-25
?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊

文件本身就是數(shù)據(jù)。文件擴(kuò)展名允許您的系統(tǒng)相應(yīng)地解釋該數(shù)據(jù)。如果沒有文件擴(kuò)展名,就無法絕對確定您正在查看哪種文件類型。(除非您使用的是有限的文件類型子集)

但是,您可以從數(shù)據(jù)中推斷出它可能是哪個文件擴(kuò)展名。Thierry V 引用的項目已過時且未維護(hù)。

相反,您可能想要查看像TrID這樣的工具,它使用不斷增長的文件類型庫。此工具將分析文件并給出最可能的文件類型的排名。就像我之前說的,它只能以有限的確定性告訴您它可能是哪種文件類型。


查看完整回答
反對 回復(fù) 2021-12-25
  • 3 回答
  • 0 關(guān)注
  • 284 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號