人気ブログランキング |
<   2019年 03月 ( 1 )   > この月の画像一覧

Delphi - 使用するファイルを他のソフトから書き込み禁止にして作成ソフトから書き込む方法

最近作成しているToDoリストソフトでToDoリストをテキストファイルに保存しているのですが、
他のテキストエディタとかで開いて内容を書き換えられるのは良くない(*)と思ったのですが、
やり方がさっぱり分からなかったのでTwitterで聞いてみたら答えていただけたので共有のために記事にします。
ちなみにButtonを押した時に動いたのか分かりにくかったので Memo1.Lines.Add をいくつか追加しています。

「TwitterではTLから見えなくなったら答えようがないから今後はMLで聞いてね!」と忠告を受けました(反省)


MemoとButtonを3つ配置します。
b0003577_22312941.png

unit LockFileUnit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
FileName: string;
LInput: TFileStream;

procedure LockFile;
begin
if FileExists(FileName) then
LInput := TFileStream.Create(FileName, fmOpenWrite or fmShareDenyWrite);
end;

procedure UnlockFile;
begin
if Assigned(LInput) then
FreeAndNil(LInput);
end;

procedure TForm1.Button1Click(Sender: TObject);
// FormCreate
begin
FileName := 'todo.txt';
if FileExists(FileName) then // ファイルがあったら実行する
begin
Memo1.Lines.Add('FormCreate');
Memo1.Lines.LoadFromFile(FileName);
Memo1.Lines.Add('FormCreate pass');
end;

LockFile;
end;

procedure TForm1.Button2Click(Sender: TObject);
// SaveFile
begin
UnlockFile;
Memo1.Lines.Add('SaveFile');
Memo1.Lines.SaveToFile(FileName);
Memo1.Lines.Add('SaveFile pass');
LockFile;
end;

procedure TForm1.Button3Click(Sender: TObject);
// FormDestroy
begin
UnlockFile;
Memo1.Lines.Add('UnlockFile');
end;

end.
ファイルの開き方や読み書きの属性についての embarcaderoのドキュメント→System.Classes.TFileStream.Create - RAD Studio API Documentation

(*):テキストエディタで書き換えてもToDoリストの内容には反映されないなど。

今回使用した環境は、Delphi 10.3 Community + Windows 10 Pro 1803です。



by arigayas | 2019-03-02 22:51 | Delphi Programming | Trackback | Comments(0)