[英]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.