Есть ли способ проверить, был ли файл открыт ReWrite в Delphi?Проверка файла открыта в Delphi
код будет идти-то вроде этого:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
Есть ли способ проверить, был ли файл открыт ReWrite в Delphi?Проверка файла открыта в Delphi
код будет идти-то вроде этого:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
Вы можете получить FileMode. (Один момент, я создам пример).
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;
Где находится объявление HFILE? Изменить: ОК в блоке Windows. – grinner 2016-05-26 10:51:30
Я нашел, что это проще сохранить логическую переменную в качестве компаньона; пример: bFileIsOpen
. Где бы ни открывался файл, установите bFileIsOpen := true
, тогда, когда вам нужно знать, открыт ли файл, просто проверьте эту переменную; Пример: if (bFileIsOpen) then Close(datafile);
Это прекрасно работает:
function IsOpen(const txt:TextFile):Boolean;
const
fmTextOpenRead = 55217;
fmTextOpenWrite = 55218;
begin
Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
end;
Этот метод здесь очень помог мне. – ChargerIIC 2014-06-12 14:06:20
ответ Иосифа работает отлично - я назвал функцию filenotopen
и изменил линию, если
Result := (HFileRes = INVALID_HANDLE_VALUE);
в
Result := NOT (HFileRes = INVALID_HANDLE_VALUE);
I также удалил строку «если нет (результат), тогда начните» (и «конец»), чтобы что она всегда закрывает дескриптор или последующие задания и читает выдающей ошибку
Теперь я называю это, как этот
if filenotopen(filename) then
begin
assignfile(f,filename);
reset(f)
etc;
end
else
message('file open by a different program')
Я подозреваю, что вы указали, что 7 был ответом JosephStyons, также принимая во внимание стиль кода, который вы использовали. Это число не является ссылкой на сообщение и фактически может измениться в любой момент. См. [Голосование] (http://stackoverflow.com/help/why-vote). Если я исказил ваши намерения, не стесняйтесь откатываться или отказываться от моего редактирования. – Reti43 2015-01-10 11:58:09
Что случилось к примеру? – Toby 2017-03-10 00:49:43