¿Hay alguna forma de comprobar si ReWrite ha abierto un archivo en Delphi?El archivo de comprobación está abierto en Delphi
Código sería algo como esto:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
¿Hay alguna forma de comprobar si ReWrite ha abierto un archivo en Delphi?El archivo de comprobación está abierto en Delphi
Código sería algo como esto:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
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.
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;
¿Dónde se encuentra la declaración HFILE? Editar: Ok, está en la unidad de Windows. – grinner
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);
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;
Este método aquí me ayudó mucho. – ChargerIIC
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')
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
Bastante correcto - Yo quería votar por él, pero siendo viejo y un idiota no puedo ver cómo hacerlo. – Whitehairedgeezer
¿Qué pasó con el ejemplo? – Toby