Como verificar se arquivo texto já está aberto?
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.
Será que alguém poderia me dar uma ajudinha nisso?
Grato e aguardo qualquer orientação.
M. C.
Curtidas 0
Respostas
M. C.
30/06/2013
Alguém pode ajudar?
GOSTEI 0
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á.
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.
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á.
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
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*/
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