Académique Documents
Professionnel Documents
Culture Documents
Voy a mostrar a continuacin las distintas maneras que tenemos para crear, editar o
eliminar archivos de texto o binarios. Tambin aprenderemos a movermos por los
directorios y por dentro de los archivos obteniendo la informacin del sistema cuando sea
necesario.
procedure TFormulario.CrearArchivoTexto;
var
F: TextFile;
begin
AssignFile( F, ExtractFilePath( Application.ExeName ) + 'prueba.txt' );
Rewrite( F );
WriteLn( F, 'Esto es el contenido del archivo de texto.' );
CloseFile( F );
end;
procedure TFormulario.AnadirArchivoTexto;
var
F: TextFile;
sArchivo: string;
begin
sArchivo := ExtractFilePath( Application.ExeName ) + 'prueba.txt';
AssignFile( F, sArchivo );
Vamos a abrir el archivo de texto en modo lectura para volcar su contenido en un campo
memo del formulario. Para ello abrimos el archivo con el procedimiento Reset y leemos
cada lnea de texto mediante ReadLn:
procedure TFormulario.CargarArchivoTexto;
var F: TextFile;
sLinea: String;
begin
AssignFile( F, ExtractFilePath( Application.ExeName ) + 'prueba.txt' );
Reset( F );
CloseFile( F );
end;
El procedimiento ReadLn obliga a leer la lnea de texto dentro de una variable. Despus
incrementa automticamente el puntero F hasta la siguiente lnea de texto, siendo la
funcin Eof la que nos dice si ha llegado al final del archivo. Aunque en este caso lo ms
fcil sera utilizar la propiedad LoadFromFile del objeto memo:
ELIMINANDO UN ARCHIVO
La eliminacin de un archivo se hace con la funcin DeleteFile la cual est dentro de la
unidad SysUtils:
procedure TFormulario.EliminarArchivoTexto;
var sArchivo: String;
begin
sArchivo := ExtractFilePath( Application.ExeName ) + 'prueba.txt';
if FileExists( sArchivo ) then
DeleteFile( sArchivo );
end;
Todas estas funciones (Rewrite, Append, etc.) vienen del lenguaje estndar de Pascal, ya
que en Delphi hay maneras mucho ms sencillas de realizar estas tareas, como veremos
ms adelante.
Para ello utilizaremos la clase TFileStream que hereda de la clase TStream para manejar
flujos de datos, en este caso archivos. Una de las ventanas de utilizar FileStream en vez
de los clsicos mtodos de pascal tales como Rewrite, WriteLn, etc. es que controla
automticamente los buffer en disco segn el tamao de los mismos en Windows.
procedure TFormulario.CrearArchivoStream;
var
F: TFileStream;
s: String;
begin
F := TFileStream.Create( ExtractFilePath( Application.ExeName ) + 'prueba.txt', fmCreate );
s := 'Aadiendo informacin al archivo de texto.' + #13 + #10;
F.Write( s[1], Length( s ) );
F.Free;
end;
El constructor Create de la clase TFileStream toma como primer parmetro la ruta del
archivo y como segundo parmetro el tipo de acceso. Los tipos de acceso son:
fmCreate -> Crea un nuevo archivo. Si el archivo ya existe lo sobrescribe.
fmOpenRead -> Abre el archivo en modo de solo lectura.
fmOpenWrite -> Abre el archivo en modo de escritura.
fmOpenReadWrite -> Abre el archivo en modo lectura/escritura.
Le hemos pasado como primer parmetro s[1] porque es la direccin de memoria donde
comienza la variable s (los string empiezan por 1). Al final de la cadena le hemos metido
cambin los caracteres de retorno de carro para que pase a la siguiente lnea, ya que un
objeto FileStream lo trata todo como texto continuo.
Para aadir lneas a nuestro archivo creado anteriormente abrimos el archivo en modo
fmOpenWrite, nos vamos al final del archivo utilizando la propiedad Position y
aadimos el texto:
procedure TFPrincipal.AnadirArchivoStream;
var
F: TFileStream;
s: String;
begin
F := TFileStream.Create( ExtractFilePath( Application.ExeName ) + 'prueba.txt', fmOpenWrite
);
F.Position := F.Size;
s := 'Aadiendo informacin al archivo de texto.' + #13 + #10;
F.Write( s[1], Length( s ) );
F.Free;
end;
procedure TFPrincipal.CargarArchivoStream;
var
F: TFileStream;
s: String;
begin
F := TFileStream.Create( ExtractFilePath( Application.ExeName ) + 'prueba.txt', fmOpenRead
);
SetLength( s, F.Size ); // *** Me faltaba esto, gracias por la correccin ***
F.Read( s[1], F.Size );
Memo.Text := s;
F.Free;
end;
Aunque en este caso no tenemos la flexibilidad que nos aportaban las funciones ReadLn
y WriteLn para archivos de texto.
Una de las cualidades de las que goza el objeto FileStream es la de bloquear el acceso a
otros usuarios mientras estamos trabajando con un archivo. La proteccin se realiza
cuando se abre el archivo. Por ejemplo, si queremos abrir el archivo en modo lectura
exclusivamente para nosotros hacemos: