#include "CDatosArchivosUsuario.h"
#include "CInfoDeArchivos.h"
//******************************************************
// Constructor de la clase CDatosArchivosUsuario
//******************************************************
CDatosArchivosUsuario::CDatosArchivosUsuario()
{
strTamanio = new char[20];
this->ListaDeArchivos = new CListaDeArchivos;
}
//******************************************************
// Metodo que recorre el directorio indicado por el usuario
// y llama al metodo getDatosArchivoYAgregarALista()
//******************************************************
TError CDatosArchivosUsuario::recorrerDirectorio(TString NombreDirectorio)
{
struct dirent **ListadeNombres;
//levanto los nombres en la ListadeNombres
long Longitud = scandir(NombreDirectorio.c_str(), &ListadeNombres, 0, alphasort);
//verifico si encontro alguno
if (Longitud < 0)
{
// Error al levantar los nombres de los archivos
return ERROR_DIRECTORIO;
}
else
{
long i = 0;
while(i < Longitud)
{
if (getDatosArchivoYAgregarALista((const char*)ListadeNombres[i]->d_name,NombreDirectorio) == ERROR_DIRECTORIO)
{
free(ListadeNombres);
return ERROR_BUSQUEDA_ARCHIVOS;
}
free(ListadeNombres[i]);
i++;
}
free(ListadeNombres);
}
return OK;
}
//******************************************************
// Metodo que obtiene los datos del archivo cuyo nombre
// es recibido por parametro. Los agrega a la lista
//******************************************************
TError CDatosArchivosUsuario::getDatosArchivoYAgregarALista(const char* NombreArchivo,TString Directorio)
{
struct stat EstrStat;
CInfoDeArchivos InfoArch;
CNodoListaArchivos Nodo;
TString strFileName;
strFileName = Directorio.c_str() ;
strFileName += '/';
strFileName += NombreArchivo;
//Levanto los datos del archivo
int Error = stat(strFileName.c_str() , &EstrStat);
if(Error == 0)
{
if (S_ISREG(EstrStat.st_mode))
{
sprintf(strTamanio, "%15d", EstrStat.st_size);
strFecha = ctime(&EstrStat.st_mtime);
InfoArch.setNombre(NombreArchivo);
InfoArch.setTamanio(strTamanio);
InfoArch.setFechaModificacion(strFecha);
Nodo.setOperacion('C');
Nodo.setInfoDeArchivo(InfoArch);
ListaDeArchivos->agregaNodoListaArchivos(Nodo);
// Nodo.limpiar();
}
}
else
{
return ERROR_DIRECTORIO;
}
return OK;
}
//******************************************************
CListaDeArchivos* CDatosArchivosUsuario::getListaDeArchivos()
{
return ListaDeArchivos;
}
//******************************************************
// Destructor de la clase CDatosArchivosUsuario
//******************************************************
CDatosArchivosUsuario::~CDatosArchivosUsuario()
{
delete[] strTamanio;
delete ListaDeArchivos;
}
//******************************************************