德尔福:TFileStream& ;;TStringList保存空白文本文件

德尔福:TFileStream& ;;TStringList保存空白文本文件,file,delphi,text,tstringlist,tfilestream,File,Delphi,Text,Tstringlist,Tfilestream,我是一名大学生(英国),在我的A2计算项目中使用delphi。我真的不是很先进,所以请容忍我!好的,我使用TStringList将TMemoBox的内容加密后保存到文本文件中。但是,这是不可能的,因为TStringList在消息后显示换行符,这会破坏加密。我遵循了这篇文章,它同时使用TStringList和TFIleStream来删除这个,但并没有给我一个完整的文本文件,结果是空的。请你帮我保存数据,而不是根本不存储数据好吗?谢谢。这是我程序的一部分 var EmailText : TStr

我是一名大学生(英国),在我的A2计算项目中使用delphi。我真的不是很先进,所以请容忍我!好的,我使用TStringList将TMemoBox的内容加密后保存到文本文件中。但是,这是不可能的,因为TStringList在消息后显示换行符,这会破坏加密。我遵循了这篇文章,它同时使用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;
因此,您已将空字符串列表保存到文件中。因此,文件是空的,因为字符串列表是空的

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

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); 

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

TStringList.Add
方法应该添加一行,这意味着它将向参数追加EOL,并将结果添加到字符串列表对象。您可以尝试
EmailText.Text:=EmailMessageMemo.Text
相反,据我所知,它应该逐字复制内容。@TLama感谢您的回复,但在保存时仍会在我的.txt文件中生成换行符…@AndriyM感谢您的帮助,但这仍会在我的文档中生成换行符:/OK,这是我的错误,我想我在备忘录中读错了,因为该行是在读取文件时生成的,而不是在保存文件时生成的。我会做一个修补程序,让你知道你真正需要做的是接受加密文本是错误的事实。加密在二进制文件上运行。您缺少的一件大事是文本和二进制之间的差异。我知道这不是你想听的,但都一样。嗨,谢谢你的回复。我正在跟踪您的简短编辑,并收到错误:“TMemo不包含名为“SaveToStream”的成员。”。我只是愚蠢,还是这是一个真正的问题?再次感谢@TobyFox:
TMemo
本身没有
SaveToStream()
方法,但是它的
Lines
属性有,就像David向您展示的那样:
EmailMessageMemo.Lines.SaveToStream(…)
FileStream := TFileStream.Create(Filename, fmCreate); 
EmailMessageMemo.Lines.SaveToStream(FileStream, TEncoding.Default);