Buscar en este blog

miércoles, 15 de agosto de 2012

Delphi 7, Listar Carpetas y Archivos

¿Cuantas veces han buscado como conocer o extraer informacion de que subdirectorios y archivos estan en un directorio especifico? ¿Cuantas veces han encontrado informacion que les facilite el manejo de archivos de un directorio?

Buscando encontre el uso del objeto TSearchRec. Pero si eres nuevo y estas comenzando, se te hace dificil encontrar la forma de usar Objetos como este.

Casi nadie se preocupa por brindar herramientas que hagan la vida mas facil en programacion. Asi que desarrolle una unidad que utiliza el objeto TSearchRec, facilitando la obtencion de informacion de los directorios.

Bueno pues ahora les traigo unos archivos *.pas, para que los agreguen a sus proyectos en Delphi7 y puedan obtener los subdirectorios de un directorio y una lista de todos los archivos contenidos en ese directorio y los subdirectorios.

Los archivos tienen los nombres de:FDirectory, FStrUtiles y EntSal.
  • FDirectory Contiene las clases TDirectory,TDirecyories,TFile y TFiles.
    • TDirectory representa un directorio
      Propiedades: Name, FullName, Exists
      Funciones:
      • getDirectories(). Devuelve un objeto de tipo TDirectories.
      • getFiles(extensiones:String). Devuelve un objeto de tipo TFiles.
      • getAllFiles(extensiones:String). Devuelve un objeto de tipo TFiles.
    • TDirectories Representa un Array de directorios
    • TFile Representa un archivo
      Constructores: Create(), Create(path:String)
      Propiedades: Name, FullName, Size, isHidden, isSystemFile, isReadOnly, Exists
    • TFiles Representa una lista de Archivos
  • FStrUtiles Contiene funciones que ayudan al las clases del archivo FDirectory, y que tambien se pueden implementar o usar en el proyecto.
    • StrLeft. Funcion que devuelve la subcadena de la parte izquierda de una cadena, especificando la cantidad de caracteres que se quieren. Ej. StrLeft('Hola Mundo',4) nos devolvera 'Hola'
    • StrRight. Funcion que devuelve la subcadena de la parte derecha de una cadena, especificando la cantidad de caracteres que se quieren. Ej. StrRight('Hola Mundo',5) nos devolvera 'Mundo'
    • GetIndexPosFromStr. Devuelve un entero que representa la posicion de un caracter especifico dentro de una cadena, y se puede buscar de izquierda derecha o de derecha a izquierda, empezando en 'x' posicion. Ej. GetIndexPosFromStr('Hola Mundo','o',10,True) nos devolvera 10 y GetIndexPosFromStr('Hola Mundo','o',1,False) nos devolvera 2
    • SplitStr. Devuelve un objeto TStringList que contiene una lista de palabras que surgieron despues de delimitar una cadena por un caracter especifico. Ej. SplitStr('Hola Mundo',' ') no devuelve un TStringList que contiene 'Hola' y
    • ExistsIn
    • UC. (UpperCase) devuelve la cadena en Mayusculas.
    • LC. (LowerCase) devuelve la cadena en Minusculas.
  • EntSal Contiene funciones de I/O (Entrada y Salida) o de Archivo, que ayudan al la unidad FDirectory.
    • TamanoArchivo. Devuelve un entero que representa el tamaño de un archivo especifico en bytes.


Ejemplo de uso: 1.- Agregar El archivo al proyecto en Project/Add To Project.
2.- En uses agregar la unidad FDirectoy
3.- Explore el directorio con una rutina como la siguiente.

procedure TForm1.LeerDirectorio(path:String);
var
  carpeta:TDirectory;
  subcar:TDirectories;
  archivos:TFiles;
  i:Integer;
begin
  carpeta := TDirectory.Create;
  carpeta.setPath(path);
  subcar := carpeta.getDirectories;
  archivos := carpeta.getAllFiles('txt,xls,xlsx'); //Obtiene solo los archivos que de texto y de excel.
  for i:=0 to (Length(subcar)-1) do begin
    //Codigo para hacer algo con las rutas de carpetas.
  end;
  for i:=0 to (Length(archivos)-1 do begin
     //Codigo para hacer algo con las rutas d los archivos
     if not archivos[i].isHidden then //Valida que los archivos no esten ocultos
      memo1.lines.add(archivos[i].FullName);
      archivos[i].free; //Libera el objeto TFile.
  end;
end;

4.- Y la llamada de la rutina seria algo como (suponiendo que un objeto TEdit (edit1) contiene la ruta del directorio que queremos explorar):
self.LeerDirectorio(self.edit1.text);


Pueden encontrar estas Unidades aqui:
EntSal.pas
FDirectory.pas
FStrUtiles.pas


Leer post completo...