2008-09-26 20 views

Respuesta

15

Puede obtener el fileMode. (En un momento, crearé un ejemplo).

TTextRec (txt) .Mode le da el modo:

55216 = closed 
55217 = open read 
55218 = open write 

fmClosed = $D7B0; 
fmInput = $D7B1; 
fmOutput = $D7B2; 
fmInOut = $D7B3; 

Buscar TTextRec en la unidad del sistema para obtener más información.

+0

¿Qué pasó con el ejemplo? – Toby

12

Prueba esto:

function IsFileInUse(fName: string) : boolean; 
var 
    HFileRes: HFILE; 
begin 
    Result := False; 
    if not FileExists(fName) then begin 
    Exit; 
    end; 

    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 begin 
    CloseHandle(HFileRes); 
    end; 
end; 
+0

¿Dónde se encuentra la declaración HFILE? Editar: Ok, está en la unidad de Windows. – grinner

1

me pareció más fácil para mantener una variable booleana como compañero; ejemplo: bFileIsOpen. Dondequiera que se abra el archivo, configure bFileIsOpen := true y, cuando necesite saber si el archivo está abierto, simplemente pruebe esta variable; ejemplo: if (bFileIsOpen) then Close(datafile);

6

Esto funciona bien:

function IsOpen(const txt:TextFile):Boolean; 
const 
    fmTextOpenRead = 55217; 
    fmTextOpenWrite = 55218; 
begin 
    Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite) 
end; 
+0

Este método aquí me ayudó mucho. – ChargerIIC

-1

contestación de José funciona perfectamente - Llamé a la función filenotopen y cambió la línea si

Result := (HFileRes = INVALID_HANDLE_VALUE); 

a

Result := NOT (HFileRes = INVALID_HANDLE_VALUE); 

también eliminó la línea 'si no (Resultado) luego comienza' (y el 'final') entonces que siempre cierra el mango o asignaciones posteriores y lee dar errores

ahora lo llamo como esto

if filenotopen(filename) then 
    begin 
    assignfile(f,filename); 
    reset(f) 
    etc; 
    end 
else 
    message('file open by a different program') 
+0

Sospecho que lo que mencionaste como 7 fue la respuesta de JosephStyons, también teniendo en cuenta el estilo de código que usaste. Ese número no es una referencia a la publicación y, de hecho, puede cambiar en cualquier momento. Ver [votación] (http://stackoverflow.com/help/why-vote). Si he tergiversado tus intenciones, puedes revertir o rechazar mi edición. – Reti43

+0

Bastante correcto - Yo quería votar por él, pero siendo viejo y un idiota no puedo ver cómo hacerlo. – Whitehairedgeezer

Cuestiones relacionadas