-1

我在 Visual Basic 中有从文件加载文本的代码。我需要把它翻译成Delphi,但不知道怎么做。

Open txtFile.Text For Binary As #1
file = Space(LOF(1))
Get #1, , file
Close #1

如何让这段代码在 Delphi 中工作?

4

3 回答 3

6

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;

如果您想为用户显示文本,则更容易 - 只需将 aTEditTMemoaTButton放在表单上,​​双击按钮以创建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;
于 2013-07-13T01:00:21.913 回答
4

如果你的 Delphi 不是太旧,你可以这样做:

uses IOUtils;
...
S := TFile.ReadAllText('MyFileName.txt');

当 RTL 提供的东西已经足够好时,不要发明自己的解决方案!

于 2013-07-13T08:52:09.067 回答
1

您可以使用 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;

免责声明:

  • 我还没有测试过;我现在不在我的开发计算机旁。因此,使用它需要您自担风险。
  • 您必须确定的是,您是以字节还是字符的形式读取数据。
  • 该示例假设您正在阅读 ANSI 文本文件
  • 该示例假设您正在读取一个不太大的文件,如果它很大,您必须以块的形式读取它。
  • 错误处理程序只是如何管理错误的示例
  • 有关更多信息,请查看 Delphi 帮助文档中的 TFileStream(和相关类)用法。
于 2013-07-13T00:32:32.793 回答