2008-09-26 7 views

ответ

15

Вы можете получить FileMode. (Один момент, я создам пример).

TTextRec (TXT) .mode дает режим:

55216 = closed 
55217 = open read 
55218 = open write 

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

Поиск TTextRec в системном блоке для получения дополнительной информации.

+0

Что случилось к примеру? – Toby 2017-03-10 00:49:43

12

Попробуйте это:

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; 
+0

Где находится объявление HFILE? Изменить: ОК в блоке Windows. – grinner 2016-05-26 10:51:30

1

Я нашел, что это проще сохранить логическую переменную в качестве компаньона; пример: bFileIsOpen. Где бы ни открывался файл, установите bFileIsOpen := true, тогда, когда вам нужно знать, открыт ли файл, просто проверьте эту переменную; Пример: if (bFileIsOpen) then Close(datafile);

6

Это прекрасно работает:

function IsOpen(const txt:TextFile):Boolean; 
const 
    fmTextOpenRead = 55217; 
    fmTextOpenWrite = 55218; 
begin 
    Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite) 
end; 
+0

Этот метод здесь очень помог мне. – ChargerIIC 2014-06-12 14:06:20

-1

ответ Иосифа работает отлично - я назвал функцию 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') 
+0

Я подозреваю, что вы указали, что 7 был ответом JosephStyons, также принимая во внимание стиль кода, который вы использовали. Это число не является ссылкой на сообщение и фактически может измениться в любой момент. См. [Голосование] (http://stackoverflow.com/help/why-vote). Если я исказил ваши намерения, не стесняйтесь откатываться или отказываться от моего редактирования. – Reti43 2015-01-10 11:58:09

Смежные вопросы