如何从Delphi中的文件加载文本?

时间:2013-07-12 23:34:09

标签: delphi vb6

我在Visual Basic中使用此代码从文件加载文本。我需要将它翻译成Delphi,但无法弄清楚如何。

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

如何让这段代码在Delphi中运行?

3 个答案:

答案 0 :(得分:6)

VB的LOF()返回一个表示文件长度的长整数。在这种情况下,它用于分配大小为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;

如果您想要为用户显示文字,则更加容易 - 只需在表单上放置TEditTMemoTButton,然后双击该按钮即可创建OnClick事件,并使用以下代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile(Edit1.Text);
end;

对于那里的纯粹主义者来说,这是一个非常接近的 literal

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;

答案 1 :(得分:3)

如果您的Delphi不太老,您可以这样做:

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

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

答案 2 :(得分:1)

您可以使用TFileStream打开TxtF​​ile.text属性中指定的文件 '#1'意味着是文件句柄,但它不需要因为你使用OOP方法。

打开txtFile.Text对于二进制#1意味着打开不在文本模式下的文件(在记事本中打开)btu作为二进制文件,因此没有任何东西可以转换为ascii字符。所有内容都将被读取广告字节而不是字符

LOF(1)似乎返回文件的长度(句柄1),'Space'将生成一个字符串,其空格字符数(#32)与文件长度相同,并将其分配给变量'文件',然后它将关闭文件句柄。

以此为例:

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(和相关类)用法。