我在 Visual Basic 中有从文件加载文本的代码。我需要把它翻译成Delphi,但不知道怎么做。
Open txtFile.Text For Binary As #1
file = Space(LOF(1))
Get #1, , file
Close #1
如何让这段代码在 Delphi 中工作?
VBLOF()
返回一个长整数,表示文件的长度。在这种情况下,它被用来分配一个LOF
大小为空格的字符串,并LOF()
返回任何文件名的长度txtFile.Text
(这可能是一个编辑控件)。
Delphi 不需要这些技术来简单地将文本文件加载到内存中。如果您只想将文件内容转换为字符串,则在 Delphi 中大致等效的代码:
function LoadTextFromFile(const FileName: string): string;
var
SL: TStringList;
begin
Result := '';
SL := TStringList.Create;
try
SL.LoadFromFile(FileName);
Result := SL.Text;
finally
SL.Free;
end;
end;
使用它:
var
MyText: string;
begin
MyText := LoadTextFromFile('C:\Temp\MyFile.txt');
// Do something with text
end;
如果您想为用户显示文本,则更容易 - 只需将 aTEdit
和 TMemo
aTButton
放在表单上,双击按钮以创建OnClick
事件,然后使用如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(Edit1.Text);
end;
对于那里的纯粹主义者来说,这是一个非常接近的字面意思:
function GetStringFromFile(const FileName: string): AnsiString;
var
MS: TMemoryStream;
begin
Result := '';
MS := TMemoryStream.Create;
try
MS.LoadFromFile('D:\Temp\TestText.txt');
SetString(Result, PAnsiChar(MS.Memory), MS.Size);
finally
MS.Free;
end;
end;
如果你的 Delphi 不是太旧,你可以这样做:
uses IOUtils;
...
S := TFile.ReadAllText('MyFileName.txt');
当 RTL 提供的东西已经足够好时,不要发明自己的解决方案!
您可以使用 TFileStream 打开文件,在 TxtFile.text 属性中指定“#1”表示文件句柄,但它不需要,因为您使用的是 OOP 方法。
Open txtFile.Text For Binary As #1 表示不以文本模式打开文件(如在记事本中打开)btu 作为二进制文件,因此无法将任何内容转换为 ascii 字符。所有内容都将被读取广告字节而不是字符
LOF(1) 似乎返回文件的长度(句柄 1),'Space' 将生成一个与文件长度具有相同数量的空格字符(#32)的字符串并将其分配给变量 'file',然后它将关闭文件句柄。
举个例子:
var
FileContents: AnsiString; // Or an 'array of Byte' instead
Stream: TFileStream;
begin
Stream := TFileStream.Create(txtFile.Text, fmOpenRead);
try
SetLength(FileContents, Stream.Size);
if Length(FileContents) > 0 then
Stream.ReadBuffer(Pointer(FileContents)^, Stream.Size);
finally
Stream.Free;
end;
// Use FileContents as needed...
end;
免责声明: