簡體   English   中英

如何使用c#.net來識別文件是文本文件還是其他文件

[英]how to identify a file is a text file or other using c#.net

我需要將文件作為文本文件訪問,並希望稍后進行處理。 但是在獲取它之前,如何識別正在提取的文件只是一個文本文件。 如果文件是另一種格式,我的整個代碼將被錯誤地解釋。 我只想訪問和處理文本文件。

目前我正在使用:

StreamReader objReader = new StreamReader(filePath);

如何在C#.NET中這樣做?

好吧,您可以應用啟發式方法:

  • 使用文件擴展名。 如果是“ .txt”,則可能是文本文件;如果是“ .jpg”,則可能不是,等等。
  • 如果您知道文件應采用哪種編碼,請檢查該編碼是否有效
  • 在文件開頭檢查常見的“幻數”,以識別各種眾所周知的二進制文件類型
  • 如果要作為西方文檔,請檢查是否以文本文件形式讀取文件,其中大多數文件的Unicode值相對較低(通常小於U + 0100,但是您可能希望查看各種Unicode代碼表以了解自行決定)
  • 除回車符,換行符和制表符外,文本文件在U + 0020之下通常沒有太多字符

但這基本上都是啟發式的。 歸根結底,文件是一個名稱和一些字節,以及一些有關訪問權限的元數據。 某些文件系統中,可能會有更多的元數據可用,但是通常很難獲取,並且在復制文件時通常不保留元數據-因此,不應依賴於此。

如果要獲取文件擴展名,可以使用

Path.GetExtension方法

如果文件是另一種格式,我的整個代碼將被錯誤地解釋。

當然,如果您期望一個文本文件並最終得到一個二進制文件,則您的代碼將錯誤地解釋它。 但是,對於任何無效的文本文件來說,情況也是如此:如果您期望的那樣用逗號分隔,該怎么辦? 還是不是json,這就是您想要的? 或者是您無法處理的編碼?

關鍵是,除非您只是復制文本或對其進行非常低級的操作,否則無論是文本還是二進制文件,您都需要進行更多的檢查。 您應該(可能)檢查整個文件是否符合您的需求。 這也將捕獲傳遞到程序中的所有非文本文件!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM