Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 18-01-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como leer un archivo de Texto alojado en un sitio web Bertifox2008 Internet 9 18-04-2009 01:07:56
leer palabras de ficheros de texto alba13 OOP 10 21-10-2007 16:15:15
Como leer un archivo de texto por codigo Shidalis Varios 2 03-09-2005 05:54:34
¿Cómo gestionar una bd de acces, que contiene un campo de texto y otro con una image? Acuarius3000 Conexión con bases de datos 1 17-01-2005 09:45:33
Saber si un Tabla(dataset) esta siendo usado por otro componente cacuna OOP 3 26-05-2004 18:21:43


La franja horaria es GMT +2. Ahora son las 03:57:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi