簡體   English   中英

使用 Delphi 檢查文件是文本文件還是二進制文件

[英]Check if a file is a text file or a binary file using Delphi

我想檢查一個文件是否是純文本文件。 我嘗試了下面的代碼:

function IsTextFile(const sFile: TFileName): boolean;
//Created By Marcelo Castro - from Brazil
var
 oIn: TFileStream;
 iRead: Integer;
 iMaxRead: Integer;
 iData: Byte;
 dummy:string;
begin
 result:=true;
 dummy :='';
 oIn := TFileStream.Create(sFile, fmOpenRead or fmShareDenyNone);
 try
   iMaxRead := 1000;  //only text the first 1000 bytes
   if iMaxRead > oIn.Size then
     iMaxRead := oIn.Size;
   for iRead := 1 to iMaxRead do
   begin
     oIn.Read(iData, 1);
     if (idata) > 127 then result:=false;
   end;
 finally
   FreeAndNil(oIn);
 end;
end;

這個 function 適用於基於 ASCII 字符的文本文件。 但文本文件也可以包含非英文字符。 對於非英文文本文件,此 function 返回 FALSE。

有什么方法可以檢查文件是文本文件還是二進制文件?

您無法檢測到代碼頁,您需要被告知。 您可以分析字節並猜測它,但這可能會產生一些奇怪(有時很有趣)的結果。 我現在找不到它,但我確信記事本可以被欺騙以中文顯示英文文本。

在不知道它使用什么編碼的情況下擁有一個字符串是沒有意義的。 你不能再把頭埋在沙子里,假裝“純”文本是 ASCII。 沒有純文本這樣的東西。 如果您有一個字符串,在 memory、文件或 email 消息中,您必須知道它的編碼是什么,否則您無法解釋它或將其正確顯示給用戶。

這是這里的第一個答案: 如何檢測文本文件的編碼/代碼頁

您還應該弄清楚任何二進制文件都可以是非通用編碼的文本。 此外,以 Base64 編碼的二進制文件將繞過您會想到的任何測試,因為根據定義,它是二進制 stream 的文本表示。

暫無
暫無

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

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