delphi
function IsFileInUse(fName : string) : boolean; var HFileRes : HFILE; Res: string[6]; function CheckAttributes(FileNam: string; CheckAttr: string): Boolean; var fa: Integer; begin fa := GetFileAttributes(PChar(FileNam)) ; Res := ''; if (fa and FILE_ATTRIBUTE_NORMAL) <> 0 then begin Result := False; Exit; end; if (fa and FILE_ATTRIBUTE_ARCHIVE) <> 0 then Res := Res + 'A'; if (fa and FILE_ATTRIBUTE_COMPRESSED) <> 0 then Res := Res + 'C'; if (fa and FILE_ATTRIBUTE_DIRECTORY) <> 0 then Res := Res + 'D'; if (fa and FILE_ATTRIBUTE_HIDDEN) <> 0 then Res := Res + 'H'; if (fa and FILE_ATTRIBUTE_READONLY) <> 0 then Res := Res + 'R'; if (fa and FILE_ATTRIBUTE_SYSTEM) <> 0 then Res := Res + 'S'; Result := AnsiContainsText(Res, CheckAttr) ; end; (*CheckAttributes*) procedure SetAttr(fName: string) ; var Attr: Integer; begin Attr := 0; if AnsiContainsText(Res, 'A') then Attr := Attr + FILE_ATTRIBUTE_ARCHIVE; if AnsiContainsText(Res, 'C') then Attr := Attr + FILE_ATTRIBUTE_COMPRESSED; if AnsiContainsText(Res, 'D') then Attr := Attr + FILE_ATTRIBUTE_DIRECTORY; if AnsiContainsText(Res, 'H') then Attr := Attr + FILE_ATTRIBUTE_HIDDEN; if AnsiContainsText(Res, 'S') then Attr := Attr + FILE_ATTRIBUTE_SYSTEM; SetFileAttributes(PChar(fName), Attr) ; end; (*SetAttr*) begin //IsFileInUse if CheckAttributes(fName, 'R') then begin Result := False; if not FileExists(fName) then exit; if MessageDlg(ExtractFileName(fName) + ' is a READ-ONLY file.' + #13#10 + 'Do you wish to clear the READ-ONLY flag???', mtConfirmation, [mbYes, mbNo], 0) = mrNo then begin Result := True; Exit; end; end; SetFileAttributes(PChar(fName), FILE_ATTRIBUTE_NORMAL) ; SetAttr(fName) ; 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 CloseHandle(HFileRes) ; end; //IsFileInUse
Su modo de uso sería la siguiente:
delphi
procedure TForm1.Button1Click(Sender: TObject); var Estado: Boolean; begin Estado := IsFileInUse('C:\descarga.html'); case Estado of False : ShowMessage('no está en uso!'); True : ShowMessage('está en uso!'); end; end;
Probado en Delphi 7, que lo disfruten.
Saludos.