ファイルが Delphi で ReWrite によって開かれたかどうかを確認する方法はありますか?
コードは次のようになります。
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
ファイルモードを取得できます。(しばらくの間、例を作成します)。
TTextRec(txt).Mode は次のモードを提供します。
55216 = closed
55217 = open read
55218 = open write
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
詳細については、システム ユニットで TTextRec を検索してください。
これを試して:
function IsFileInUse(fName: string) : boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(fName) then begin
Exit;
end;
HFileRes := CreateFile(PChar(fName)
,GENERIC_READ or GENERIC_WRITE
,0
,nil
,OPEN_EXISTING
,FILE_ATTRIBUTE_NORMAL
,0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not(Result) then begin
CloseHandle(HFileRes);
end;
end;
これはうまくいきます:
function IsOpen(const txt:TextFile):Boolean;
const
fmTextOpenRead = 55217;
fmTextOpenWrite = 55218;
begin
Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
end;
ブール変数をコンパニオンとして保持する方が簡単であることがわかりました。例: bFileIsOpen
. ファイルが開かれている場合はいつでも設定し、bFileIsOpen := true
ファイルが開いているかどうかを知る必要があるときはいつでも、この変数をテストしてください。例:if (bFileIsOpen) then Close(datafile);