BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


9. ARCHIVOS.
9.7. PROCEDIMIENTOS Y FUNCIONES DE ARCHIVOS DE LA UNIDAD SYSUTILS.
9. ARCHIVOS.
9.7. PROCEDIMIENTOS Y FUNCIONES DE ARCHIVOS DE LA UNIDAD SYSUTILS.
9. ARCHIVOS.
9.7. PROCEDIMIENTOS Y FUNCIONES DE ARCHIVOS DE LA UNIDAD SYSUTILS.

SIGUIENTE

SIGUIENTE

SIGUIENTE


Todas las rutinas aquí descritas, trabajan con nombres de archivos en ASCII o su variante ANSI sólo para los sistemas operativos Windows, en Linux se usan nombres de archivos en UTF8.

‒ 01. SetCurrentDir, GetCurrentDir, CreateDir, RemoveDir y DirectoryExists.

Estas rutinas nos permiten cambiar de una carpeta a otra, obtener la dirección de la carpeta actual en uso por el programa, crear una carpeta, remover o borrar una carpeta y verificar la existencia de una carpeta. SetCurrentDir, CreateDir y RemoveDir son funciones que aceptan un parámetro de tipo string que debe ser el nombre de la carpeta, estas devuelven un resultado de tipo boolean, devuelve true si la operación se realiza con éxito y false en caso contrario. RemoveDir no borrara una carpeta si esta contiene archivos o más carpetas en su interior. GetCurrentDir es otra función que no tiene parámetros y nos devuelve la dirección actual o en uso por el programa. CreateDir, no puede crear varias carpetas ingresando sólo la dirección, es decir si queremos crear la carpeta ABC y dentro de ella crear la carpeta documentos, primero se debe crear la carpeta ABC y después crear la carpeta documentos. SetCurrentDir, RemoveDir y CreateDir pueden usar rutas relativas.Las funciones SetCurrent, RemoveDir y CreateDir devuelven un valor booleano, verdadero si la operación fue un éxito y falso en caso contrario. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var Arch:longint;
Begin
  CreateDir('ABC');
  CreateDir('ABC/documentos'); 
  CreateDir('ABC/documentos/Cartas'); 
  CreateDir('ABC/documentos/Informes');
  SetCurrentDir('ABC/documentos/Cartas');
  Arch:=FileCreate('carta-001.txt'); 
  FileClose(Arch);
  SetCurrentDir('../../../');
  RemoveDir('ABC/documentos/Informes'); 
  if DirectoryExists('ABC/documentos/Informes')
     then Writeln('Directorio no borrado')
     else Writeln('Directorio borrado');
  RemoveDir('ABC/documentos/Cartas');
  if DirectoryExists('ABC/documentos/Cartas')
     then Writeln('Directorio no borrado')
     else Writeln('Directorio borrado');
  CreateDir('..\XYZ'); 
End.
Código fuente 21: Ejemplo CreateDir, GetCurrentDir, SetCurrentDir, RemoveDir y DirectoryExists.
Descargar

‒ 02. FileGetAttr.

Esta rutina nos permite devolver los atributos de un archivo, el valor devuelto por esta función es una variable de tipo longint, que con ayuda de las banderas y el operador And se puede verificar que atributo del archivo esta activado. Las banderas se definen con las siguientes constantes: La constante faReadOnly, nos permite verificar si el archivo es de solo lectura. La constante faHidden, nos permite verificar si el archivo está escondido. faSysfile, nos permite verificar si el archivo es un archivo del sistema, aunque en la actualidad su uso carece de significado, faDirectory, nos permite verificar si el archivo es una carpeta, y por último faArchive nos indica que es un archivo modificado y se pone a 1 cuando se modifica de algún modo.

Los atributos de un archivo sólo usan 8 bits y se distribuyen tal como se muestra en el siguiente gráfico:

Para comprobar si el archivo tiene uno de estos atributos encendidos se hace uso del operador and con el atributo obtenido y una de las constantes antes mencionadas, después se verifica si el resultado es cero, en caso sea diferente a cero nos indica que ese bit esta encendido. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var NomArch:String;
    Atributo:longint;
Begin  
  Write('Ingrese el nombre de un archivo: ');Readln(NomArch);
  Atributo:=FileGetAttr(NomArch);  
  Writeln('Atributos del archivo ',Atributo);  
  //Se Verifica si el bit esta encendido con ayuda de las banderas y el operador and
  if (Atributo and faReadOnly)<>0 then Writeln('Solo lectura');
  if (Atributo and faHidden)<>0 then Writeln('Escondido');
  if (Atributo and faSysfile)<>0 then Writeln('Sistema');
  if (Atributo and faDirectory)<>0 then Writeln('Carpeta');
  if (Atributo and faArchive)<>0 then Writeln('Archivo')
End.
Código fuente 22: Ejemplo FileGetAttr.
Descargar

‒ 3. FileSetAttr.

Esta rutina nos permite colocar los atributos de un archivo, esta rutina tiene dos parámetros el primero el nombre del archivo y el segundo parámetro es la unión con el operador or, de una las constantes faReadOnly, faHidden, faSysfile y faDirectory, según sea el caso. Esta función devuelve 0 si la operación se llevo con exito, caso contrario devuelve -1. Esta función sólo funciona en sistemas operativos Windows en Linux devolverá -1. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var NomArch:String;
    Atributo:longint;
Begin  
  Write('Ingrese el nombre de un archivo: ');Readln(NomArch);
  FileSetAttr(NomArch,faReadOnly or faHidden);
  Atributo:=FileGetAttr(NomArch);  
  Writeln('Atributos del archivo ',Atributo);  
  //Se Verifica si el bit esta encendido con ayuda de las banderas y el operador and
  if (Atributo and faReadOnly)<>0 then Writeln('Solo lectura');
  if (Atributo and faHidden)<>0 then Writeln('Escondido');
  if (Atributo and faSysfile)<>0 then Writeln('Sistema');
  if (Atributo and faDirectory)<>0 then Writeln('Carpeta')
End.
Código fuente 23: Ejemplo FileSetAttr.
Descargar

‒ 4. FindFirst, FindNext, FindClose

Estas rutinas se usan en conjunto para realizar búsquedas de archivos en el sistema, estas rutinas trabajan con el uso del tipo de datos registro TSearchRec definido en la unidad sysutils, que contiene los siguientes campos:

Time
De tipo Longint, se usa para almacenar la hora y fecha de modificación del archivo.
Size
De tipo Int64, se usa para almacenar el tamaño en bytes del archivo.
Attr
De tipo Longint, se usa para almacenar los atributos de un archivo, que se puede verificar con las banderas: faReadOnly, faHidden, faSysfile, faDirectory usadas con la función FileGetAttr.
Name
De tipo String, El nombre del archivo, sin la ruta.
ExcludeAttr
De tipo Longint (de uso reservado)
FindHandle
De tipo Longword (de uso reservado)
Mode
De tipo LongWord (sólo para Linux)
PathOnly
De tipo AnsisString, (de uso reservado. Este campo no se usa, y se incluye sólo para compatibilidad con Kylix)

FindFirst, es la función que se encarga de iniciar una búsqueda de archivos, tiene 3 parámetros, el primero es la ruta o los caracteres comodines que se usarán en la búsqueda. El segundo parámetro son los atributos adicionales de búsqueda de los archivos, FindFirst siempre buscará cualquier archivo ordinario, es decir un archivo ordinario es un archivo que no tiene ningún atributo o es un archivo de sólo lectura (faReadOnly) o un archivo modificado (faArchive). Si colocamos 0 en el segundo parámetro buscará cualquier archivo ordinario, pero si colocamos faDirectory, buscará cualquier archivo ordinario y también carpetas. Pero si colocamos faReadOnly, buscará archivos de sólo lectura pero no excluirá de la búsqueda a los otros archivos ordinarios, es decir usar los atributos faReadOnly o faArchive carecen de sentido ya que estos son archivos ordinarios.

El último y tercer parámetro es un registro de tipo TSearchRec, que es devuelto por la función con información del primer archivo encontrado. La función FindFirst devuelve 0 si encontró algún archivo, caso contrario devuelve un valor distinto de cero. FindNext, es la función que se encarga de devolver en su único parámetro el siguiente archivo encontrado, de la búsqueda iniciada con FindFirst, este parámetro es de tipo TSearchRec, la función devuelve 0 si existe un siguiente archivo, caso contrario devuelve un valor distinto de cero. FindClose, es la función encargada de cerrar la búsqueda iniciada por FindFirst, esta función debe usarse siempre cada vez que se hace una búsqueda iniciada con FindFirst, y su único parámetro es un registro de tipo TSearchRec. En todo el proceso de búsqueda, las 3 funciones FindFirst, FindNext y FindClose deben usar la misma variable de tipo TSearchRec. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var Archivo:TSearchRec;
Begin

  if FindFirst('*',FaAnyfile,Archivo)=0
    then
     Begin
       Repeat
         Write(Archivo.name:25,'  ',Archivo.Size:20,'  ');
         if (Archivo.Attr and faArchive)=faArchive then Write(' Modificado ');
         if (Archivo.Attr and faDirectory)=faDirectory then Write(' Carpeta ');
         if (Archivo.Attr and faHidden)=faHidden then Write(' Oculto ');
         if (Archivo.Attr and faReadOnly)=faReadOnly then Write(' Lectura ');
         if (Archivo.Attr and faSysfile)=faSysfile then Write(' Systema ');
         Writeln;
       Until FindNext(Archivo)<>0
     End;
  FindClose(Archivo);
End.
Código fuente 24: Ejemplo FindFirst, FindNext y FindClose.
Descargar

Para verificar si un archivo encontrado tiene alguno de sus atributos, se debe usar el operador and, para saber si el bit de su atributo esta activado.

‒ 5. FileAge, FileDateToDateTime.

FileAge, es una función que nos devuelve la fecha y hora de la última modificación del archivo en un tipo de dato longint, su único parámetro es el nombre del archivo. La función FileDateToDateTime convierte el longint devuelto por FileAge en un double, para poder usarlo con FormatDateTime. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var Archivo:TSearchRec;
    UltimaModificacion:Double;
Begin
  UltimaModificacion:=FileDateToDateTime(FileAge('Ejemplo05.pp'));
  Writeln(FormatDateTime('dd/mm/yyyy tt',UltimaModificacion));
End.
Código fuente 25: Ejemplo FileAge y FileDateToDateTime.
Descargar

‒ 6. FileSetDate.

Permite modificar la fecha y hora de la última modificación del archivo. La función tiene dos parámetros el primero puede ser el nombre de un archivo o un manejador de archivo, y el segundo parámetros es la nueva fecha y hora que se le quiere asignar a un archivo. El siguiente ejemplo permite sacar la copia de un archivo, manteniendo su fecha y hora de su última modificación:


Descargar
{$codepage utf8}
{$ifdef win32}
   Uses sysutils;
{$endif}
{$ifdef Unix}
   Uses sysutils,cwstring;
{$endif}
 var
   Arch01,Arch02: longint;
   BytesLeidos,BytesEscritos: longint;
   NombreArch01,NombreArch02: String;
   B: array[1..2048] of byte; 
   T01:longint;
 begin
   Write('Nombre del archivo a copiar: ');
   ReadLn(NombreArch01);
   T01:=FileAge(NombreArch01);
   Write('Nuevo nombre del archivo copiado: ');
   ReadLn(NombreArch02);
   Arch01:=FileOpen(NombreArch01,fmOpenReadWrite);
   Arch02:=FileCreate(NombreArch02);
   repeat
     BytesLeidos:=FileRead(Arch01,B,2048);
     BytesEscritos:=FileWrite(Arch02,B,BytesLeidos);
     Write('.')
   until (BytesLeidos = 0) or (BytesEscritos <> BytesLeidos);
   FileClose(Arch01);
   FileClose(Arch02);
   FileSetDate(NombreArch02,T01);
 end.
Código fuente 26: Ejemplo FileSetDate.
Descargar

‒ 7. DateTimeToFileDate.

Esta función hace lo contrario a FileDateToDateTime, convierte un double que representa la fecha y hora, a un longint que representa la fecha y hora, esto nos permite por ejemplo, modificar la fecha y hora de un archivo con la fecha y hora actual del sistema. Se debe recordar que la función Now devuelve un double con la representación de la fecha y hora actual del sistema. Ejemplo:


Descargar
{$codepage utf8}
{$ifdef win32}
   Uses sysutils;
{$endif}
{$ifdef Unix}
   Uses sysutils,cwstring;
{$endif}
 var   
   NombreArch01:String;   
   T01:longint;
   D01:double;
 begin
   Write('Nombre del archivo a modificar fecha y hora: ');
   ReadLn(NombreArch01);
   D01:=Now;
   T01:=DateTimeToFileDate(D01);
   FileSetDate(NombreArch01,T01);
 end.
Código fuente 27: Ejemplo DateTimeToFileDate.
Descargar

‒ 8. RenameFile.

Esta función nos permite cambiar el nombre de un archivo, el primer parámetro es el nombre anterior y el segundo parámetro es el nuevo nombre. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var Arch:longint;
    Cad:String;
    NuevoNombre:String;
Begin
  Cad:='Lorem Ipsum';
  Writeln('Creando el archivo ABC.txt');
  Arch:=FileCreate('ABC.txt');
  FileWrite(Arch,Cad[1],Length(Cad));
  FileClose(Arch);
  Write('Nuevo nombre = ');Readln(NuevoNombre);
  if RenameFile('ABC.txt',NuevoNombre) 
     then Writeln('Archivo renombrado con exito')    
     else Writeln('No se pudo renombrar el archivo');
End.
Código fuente 28: Ejemplo RenameFile.
Descargar

Esta función también se puede utilizar, aunque parezca extraño para mover un archivo, sólo basta con colocar la nueva ruta de destino con el nuevo nombre de archivo, es decir si queremos mover el archivo color.txt que se encuentra en afiches/paletas/ a un nuevo destino como, volantes/paletas, se debe hacer del siguiente modo:


Descargar
{$Codepage UTF8}
Uses sysutils;

Begin

  if RenameFile('afiches/paletas/color.txt','volantes/paletas/color.txt');  
     then Writeln('Archivo movido con exito')    
     else Writeln('No se pudo mover el archivo');
End.
Código fuente 29: Ejemplo de RenameFile para mover un archivo a otra carpeta.
Descargar

como se puede observar no se cambia el nombre, sino las rutas de origen y destino del archivo.

‒ 9. DeleteFile.

Esta función nos permite borrar el nombre de un archivo, el único parámetro que tiene es el nombre del archivo a borrar. Ejemplo:


Descargar
{$Codepage UTF8}
Uses sysutils;
Var Arch:longint;
    Cad:String;
Begin
  Cad:='Lorem Ipsum';
  Writeln('Creando el archivo ABC.txt');
  Arch:=FileCreate('ABC.txt');
  FileWrite(Arch,Cad[1],Length(Cad));
  FileClose(Arch);
  Write('Presione enter para borrar el archivo ABC.txt');Readln;
  DeleteFile('ABC.txt')  
End.
Código fuente 30: Ejemplo DeleteFile.
Descargar




SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.