web-dev-qa-db-ja.com

Delphiで文字列を.txtファイルに保存する方法は?

設定した特定の宛先にテキストファイル形式で保存されるパスワードを生成するプログラムを作成する必要があり、ユーザーは.txtを開いてパスワードを取得し、別のプログラムを「ロック解除」する必要があります。

文字列sPassにパスワードを生成するコードを既に持っているので、SaveToFile関数を使用してPassword.txtという名前の作成したテキストファイルに保存する必要がありますが、SaveTo File関数を使用する一般的なフォームが見つかりませんDelphiと私は、関数のどこにsPassとPassword.txtを配置するのかわかりません。

SaveToFile(...)のようなものであるべきですが、Password.txtにsPassを保存する方法がわかりません

編集:

もう1つ質問があります。それは、Password.txtに文字列を追加する前にPassword.txtに保存されているものを削除してから、Password.txtを空白にしてから文字列を追加する方法です。ありがとう

20
Nyt Ryda

現代的な方法は、文字列リストを作成し、それをファイルに保存することです。

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のパスワード暗号化
安全な方法でパスワードを保存する方法に関するヒント。

22
Johan

Modern Modernの方法は、TFile.WriteAllText IOUtilsで(Delphi 2010以降)

プロシージャWriteAllText(constパス:文字列; const内容:文字列);過負荷;静的;

新しいファイルを作成し、指定された文字列をファイルに書き込み、ファイルを閉じます。ターゲットファイルが既に存在する場合、上書きされます。

36
awmross

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;
16
RRUZ

最も速くて簡単な方法、変数を宣言する必要はありません:

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