Как сохранить строку в файл .txt в Delphi? - PullRequest
20 голосов
/ 13 октября 2011

Мне нужно создать программу, которая генерирует пароль, который сохраняется в формате текстового файла в указанном мной месте назначения, и пользователю необходимо открыть .txt, чтобы получить пароль для «разблокировки» другой программы.

Я уже получил код для генерации пароля в строке sPass, и теперь мне нужно использовать функцию SaveToFile, чтобы сохранить ее в текстовом файле, который я создал с именем Password.txt, но я не могу найти общую форму для использования SaveTo Файловая функция в Delphi, и я не знаю, куда поместить sPass и Password.txt в функцию.

Это должно быть что-то вроде: SaveToFile (...), но я не знаю, как сохранить sPass в Password.txt

Редактировать:

Еще один вопрос, как удалить то, что ранее сохранялось в Password.txt, прежде чем добавить в него строку, чтобы пароль Password.txt оставался пустым до добавления строки? Спасибо

Ответы [ 4 ]

36 голосов
/ 14 октября 2011

Современный современный способ - это использование TFile.WriteAllText в IOUtils (Delphi 2010 и выше)

процедура WriteAllText (const Path: string; const Contents Contents: string);перегрузки;static;

Создает новый файл, записывает указанную строку в файл и затем закрывает файл.Если целевой файл уже существует, он перезаписывается.

22 голосов
/ 13 октября 2011

Современный способ - создать список строк и сохранить его в файл.

procedure MakeAStringlistAndSaveThat;
var
  MyText: TStringlist;
begin
  MyText:= TStringlist.create;
  try
    MyText.Add('line 1');
    MyText.Add('line 2');
    MyText.SaveToFile('c:\folder\filename.txt');
  finally
    MyText.Free
  end; {try}
end;

Обратите внимание, что в Delphi уже есть связанный класс, который делает все, что вы хотите: TInifile.
Он хранит значения и ключив формате key = 'value'.

passwordlist:= TInifile.Create;
try
  passwordlist.LoadFromFile('c:\folder\passwords.txt');
  //Add or replace a password for `user1`
  passwordlist.WriteString('sectionname','user1','topsecretpassword');
  passwordlist.SaveToFile('c:\folder\passwords.txt');
finally
  passwordlist.Free;
end; {try}

Предупреждение
Обратите внимание, что сохранение незашифрованных паролей в текстовом файле является утечкой безопасности.Лучше хешировать пароли, используя хэш-функцию, см. Шифрование паролей в Delphi
Для получения советов о том, как сохранять пароли безопасным способом.

15 голосов
/ 13 октября 2011

Вы можете использовать класс TFileStream для сохранения строки в файл:

uses
  Classes;

procedure StrToFile(const FileName, SourceString : string);
var
  Stream : TFileStream;
begin
  Stream:= TFileStream.Create(FileName, fmCreate);
  try
    Stream.WriteBuffer(Pointer(SourceString)^, Length(SourceString));
  finally
    Stream.Free;
  end;
end;

и читать

function FileToStr(const FileName : string):string;
var
  Stream : TFileStream;
begin
  Stream:= TFileStream.Create(FileName, fmOpenRead);
  try
    SetLength(Result, Stream.Size);
    Stream.Position:=0;
    Stream.ReadBuffer(Pointer(Result)^, Stream.Size);
  finally
    Stream.Free;
  end;
end;
4 голосов
/ 26 декабря 2013

Самый быстрый и простой способ, не нужно объявлять переменные:

with TStringList.Create do
 try
  Add(SomeString);
  SaveToFile('c:\1.txt');
 finally
  Free;
 end;
...