fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//............ Esta rutina lo que hace es bucar que unidades hay en mi PC y las visualiza en el componente ListView
UINT Unidades=GetLogicalDrives();
char Unidad;
char name[4];
DIR *d;
struct dirent *dirp;
TListItem * Item;
struct stat fileInfo;
ListView1->ViewStyle=vsList;
name[1]=':'; name[2]='\';
for(int i=0; i<26; i++){
if (Unidades & (int)pow(2,i)){
Unidad=(char)((i+'A'));
name[0]=Unidad;
Item=ListView1->Items->Add();
Item->Caption = name;
Item->ImageIndex=0;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DobleClickl(TObject *Sender) // Al hacer doble click en una carpeta la abre y explora su contenido
{
TListItem * Item;
DIR* dir=NULL;
struct dirent* stdir;
struct stat fileInfo;
struct ffblk st;
Item=ListView1->Selected;
AnsiString camino;
camino=Ruta->Text; // Un TMemo para guardar la última ubicación
if (camino=="rn") // Estoy visualizando las unidades
{
strcpy(camino.c_str(),Item->Caption.c_str());
Ruta->Text=(camino.c_str());
}
else // si estoy en cualquier otra ruta
{
strcat(camino.c_str(),Item->Caption.c_str());
strcat(camino.c_str(),"\");
Ruta->Text=(camino.c_str());
}
dir=opendir(camino.c_str()); //Abrimos el directorio
ListView1->Clear(); // Limpiamos la lista
while( (dir!=NULL)&&(stdir = readdir(dir))!=NULL )
{
Item=ListView1->Items->Add();
Item->Caption = stdir->d_name;
strcat(camino.c_str(),stdir->d_name);
stat(camino.c_str(), &fileInfo);
// determinamos que tipo de archivo es... (archivo regular, directorio...)
if( S_ISDIR(fileInfo.st_mode) )
Item->ImageIndex=0; // Uso un componente ImageList para ponerle un icono
else
Item->ImageIndex=2;
//Recuperamos la ruta del directorio que se está recorriendo
strcpy(camino.c_str(),Ruta->Text.c_str());
}
closedir(dir);
}