Ver Mensaje Individual
  #4  
Antiguo 18-01-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola yn4v4s.

No sé que modo de uso compartido definió la aplicación que mencionas al abrir el archivo, pero podrías probar de este modo:
Código Delphi [-]
...
const
  F_NAME = 'C:\CARPETA\XXXXXX.LOG'; // ruta + nombre_archivo

function FileHasReadAccess(const aName: TFileName): Boolean;
var
  FileHwnd: THandle;
begin
  FileHwnd := CreateFile(PAnsiChar(aName), GENERIC_READ,
    FILE_SHARE_WRITE+FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
  Result := GetLastError <> ERROR_SHARING_VIOLATION;
  CloseHandle(FileHwnd);
end;

function ApiReadTxtFile(const aName: TFileName): string;
var
  FileHwnd: THandle;
  dwBytesToRead: DWORD;
  lpBytesRead: Cardinal;
  lpBuffer: PChar;
begin
  FileHwnd := CreateFile(PAnsiChar(aName), GENERIC_READ,
     FILE_SHARE_WRITE+FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
  if FileHwnd <> INVALID_HANDLE_VALUE then
  begin
    dwBytesToRead := GetFileSize(FileHwnd, nil);
    lpBuffer := VirtualAlloc(nil, dwBytesToRead, MEM_COMMIT, PAGE_READWRITE);
    try
      SetFilePointer(FileHwnd, 0, nil, FILE_BEGIN);
      ReadFile(FileHwnd, lpBuffer^, dwBytesToRead, lpBytesRead, nil);
      SetString(Result, lpBuffer, dwBytesToRead);
    finally
      VirtualFree(lpBuffer, dwBytesToRead, MEM_RELEASE);
    end;
  end;
  CloseHandle(FileHwnd);
end;

// Llamada ejemplo:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if FileHasReadAccess(F_NAME) then
  begin
    Memo1.Clear;
    Memo1.Text := ApiReadTxtFile(F_NAME);
    Memo1.Invalidate;
  end
  else
   raise Exception.Create('Un proceso usa el archivo y niega compartir la lectura.');
end;
...
De todos modos no sé si es una buena idea... Nada garantiza que estes leyendo información actualizada y mas importante aún, es que escribir y leer un archivo al mismo tiempo con dos procesos diferentes expone los datos a posibles corrupciones.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita