【问题标题】:Delphi: TFileStream & TStringList saving a blank text fileDelphi:TFileStream & TStringList 保存一个空白文本文件
【发布时间】:2014-11-28 21:27:49
【问题描述】:

我是一名大学生(英国),在我的 A2 计算项目中使用 delphi。我真的不是很先进所以请多多包涵!好的,所以我使用 TStringList 在加密后将 TMemoBox 的内容保存到文本文件中。但是,这是不可能的,因为 TStringList 在消息后显示了一个换行符,这会破坏加密。我关注了this 文章,该文章同时使用 TStringList 和 TFIleStream 来删除它,但没有给我一个完整的文本文件,结果是空的。请您帮助保存数据而不是根本不存储它吗?非常感谢。这是我的程序的一部分。

var
  EmailText : TStringList;
  FileStream : TFileStream;
begin
  FileName := 'email1.txt';
  EmailText := TStringList.Create;
  FileStream := TFileStream.Create(Filename, fmCreate);          

  EmailText.SaveToStream(FileStream, EmailText.Encoding);
  FileStream.Size := FileStream.Size - Length(System.sLineBreak);           
  EmailText.Add(EmailMessageMemo.Text);                            
  FileStream.Free;
  EmailText.Free;

【问题讨论】:

  • TStringList.Add 方法应该添加一个 line,这意味着它将 EOL 附加到参数并将结果添加到字符串列表对象。你可以试试EmailText.Text := EmailMessageMemo.Text;,据我所知,它应该逐字复制内容。
  • @TLama 感谢您的回复,但是保存时我的 .txt 文件中仍然会生成换行符...
  • @AndriyM 感谢您的帮助,但这仍然会在我的文档中产生换行符:/
  • 好的,这是我的错误,我认为我将其读入备忘录错误,因为该行是在读取文件时生成的,而不是在保存时生成的。我会有一个修补匠,让你知道
  • 您真正需要做的是接受加密文本是错误的事实。加密对二进制进行。您缺少的最重要的事情是文本和二进制之间的区别。我知道这不是你想听到的,但都一样。

标签: file delphi text tstringlist tfilestream


【解决方案1】:
EmailText := TStringList.Create; // new string list, empty
FileStream := TFileStream.Create(Filename, fmCreate); 
EmailText.SaveToStream(FileStream, EmailText.Encoding); 

所以你已经将一个空字符串列表保存到一个文件中。所以你的文件是空的,因为你的字符串列表是空的。

我猜您打算在保存之前将内容添加到字符串列表中。

EmailText := TStringList.Create;
EmailText.AddStrings(EmailMessageMemo.Lines);
FileStream := TFileStream.Create(Filename, fmCreate); 
EmailText.SaveToStream(FileStream, EmailText.Encoding); 

不过,额外的字符串列表是不必要的。你可以这样做:

FileStream := TFileStream.Create(Filename, fmCreate); 
EmailMessageMemo.Lines.SaveToStream(FileStream, TEncoding.Default); 

我还想指出,正如我在许多其他场合所做的那样,加密是在二进制而不是文本上运行的。当然,如果您不尝试将文本视为二进制,反之亦然,那么您就不会遭受杂散换行文本的困扰。

【讨论】:

  • 您好,感谢您的回复。我正在关注您的简短编辑,但出现错误:'TMemo 不包含名为'SaveToStream'的成员。我只是愚蠢还是这是一个真正的问题?再次感谢!
  • @TobyFox: TMemo 本身没有SaveToStream() 方法,但它的Lines 属性有,就像大卫向你展示的那样:EmailMessageMemo.Lines.SaveToStream(...);
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多