15

ファイルが Delphi で ReWrite によって開かれたかどうかを確認する方法はありますか?

コードは次のようになります。

AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
   Rewrite(textFile);
4

5 に答える 5

17

ファイルモードを取得できます。(しばらくの間、例を作成します)。

TTextRec(txt).Mode は次のモードを提供します。

55216 = closed
55217 = open read
55218 = open write

fmClosed = $D7B0;
fmInput  = $D7B1;
fmOutput = $D7B2;
fmInOut  = $D7B3;

詳細については、システム ユニットで TTextRec を検索してください。

于 2008-09-26T19:11:16.857 に答える
13

これを試して:

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;
于 2008-09-26T19:17:26.733 に答える
9

これはうまくいきます:

function IsOpen(const txt:TextFile):Boolean;
const
  fmTextOpenRead = 55217;
  fmTextOpenWrite = 55218;
begin
  Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
end;
于 2011-11-17T11:29:31.053 に答える
1

ブール変数をコンパニオンとして保持する方が簡単であることがわかりました。例: bFileIsOpen. ファイルが開かれている場合はいつでも設定し、bFileIsOpen := trueファイルが開いているかどうかを知る必要があるときはいつでも、この変数をテストしてください。例:if (bFileIsOpen) then Close(datafile);

于 2011-10-11T17:47:13.427 に答える