2014-11-28 5 views
0

Я студент колледжа (Великобритания), используя delphi для моего проекта A2 Computing. Я действительно не очень продвинутый, поэтому, пожалуйста, несите меня! Хорошо, поэтому я использую TStringList для сохранения содержимого TMemoBox в текстовый файл после его шифрования. Тем не менее, это было невозможно из-за того, что TStringList показывает показ линии после сообщения, которое испортило шифрование. Я последовал за статьей this, в которой используются как TStringList, так и TFIleStream, чтобы удалить это, но вместо того, чтобы дать мне полный текстовый файл, результат пуст. Пожалуйста, не могли бы вы сохранить данные, а не хранить их вообще? Большое спасибо. Вот часть моей процедуры.Delphi: TFileStream & TStringList, сохраняющий пустой текстовый файл

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; 
+0

Метод 'TStringList.Add' должен добавить * строку *, что означает, что он добавит EOL к аргументу и добавит полученную вещь в объект списка строк. Вместо этого вы можете попробовать «EmailText.Text: = EmailMessageMemo.Text;», который, насколько мне известно, должен скопировать содержимое дословно. –

+0

@TLama Спасибо за ответ, но он все еще генерирует строку в моем .txt-файле, когда он сохранен ... –

+0

@AndriyM благодарит за помощь, но это все еще порождает разрыв строки в моем документе:/ –

ответ

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

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

+0

Привет, спасибо за ваш ответ. Я следую вашему короткому редактированию и получаю ошибку: «TMemo не содержит члена, называемого« SaveToStream ». Я просто глуп или это настоящая проблема? Еще раз спасибо! –

+1

@TobyFox: 'TMemo' сам по себе не имеет метода' SaveToStream() ', но его свойство' Lines', как и Дэвид, показало вам: 'EmailMessageMemo.Lines.SaveToStream (...); ' –