Como verificar se arquivo texto já está aberto?

Delphi

30/06/2013

Qual a forma correta de verificar se um determinado arquivo texto já se encontra aberto por outro programa? Quero abrir um determinado arquivo texto, mas só que em modo exclusivo, ou seja, o mesmo não pode já está aberto anteriormente. Fiz farios teste com "FileOpen" e "TStreamFile", mas os mesmos não detectam se o arquivo em questão já está aberto ou não.

Será que alguém poderia me dar uma ajudinha nisso?

Grato e aguardo qualquer orientação.
M. C.

M. C.

Curtidas 0

Respostas

M. C.

M. C.

30/06/2013

Alguém pode ajudar?
GOSTEI 0
Adalberto Brasaca

Adalberto Brasaca

30/06/2013

Não sei se você conseguiu resolver... Em todo caso, vai um código que achei na net...

function IsFileInUse(fName : string) : boolean;
var //fNAME é o caminho com o nome do arquivo a ser testado se está em uso.
HFileRes : HFILE;
begin
Result := false;
if not FileExists(fName) then exit;
HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
end;

Se a função retornar True, o arquivo está em uso. Caso retorne False, não está.
GOSTEI 0
M. C.

M. C.

30/06/2013

Não sei se você conseguiu resolver... Em todo caso, vai um código que achei na net...

function IsFileInUse(fName : string) : boolean;
var //fNAME é o caminho com o nome do arquivo a ser testado se está em uso.
HFileRes : HFILE;
begin
Result := false;
if not FileExists(fName) then exit;
HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
end;

Se a função retornar True, o arquivo está em uso. Caso retorne False, não está.


Olá,

Não consegui resolver não.

Se não me falha a memória, já tentei algo muito parecido com essa sua função.

Vou ver se com a sua ajuda a coisa aqui dá certo.

Grato pela sua atenção.
GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

30/06/2013

/*inicio*/
function IsFileInUse(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then Exit;
HFileRes := CreateFile(PChar(FileName),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;
/*fim*/


Exemplo de uso:

/*inicio*/
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsFileInUse(c:\Programs\delphi6\bin\delphi32.exe) then
ShowMessage(File is in use.);
else
ShowMessage(File not in use.);
end;
/*fim*/
GOSTEI 0
POSTAR