Delphi: TFileStream & TStringList сохраняя пустой текстовый файл

Я студент колледжа (Великобритания), использующий Delphi для моего проекта A2 Computing. Я действительно не очень продвинутый, поэтому, пожалуйста, потерпите меня! Итак, я использую 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;

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

Я также хотел бы отметить, что, как я уже делал во многих других случаях, шифрование работает не с текстом, а с двоичным кодом. Конечно, если бы вы не пытались обрабатывать текст как двоичный, и наоборот, вы не пострадали бы от разбитого текста.

Другие вопросы по тегам