A ver, para cuando quiero seleccionar directorios tengo esto:
Código PHP:
int __fastcall TForm1::GetFilesDir(char *path, int *nArchivos)
{
int largoMayor=0;
WideString FullPath;
/* Con un puntero a DIR abriremos el directorio */
DIR *dir;
/* en *ent habrá información sobre el archivo que se está "sacando" a cada momento */
struct dirent *ent;
dir = opendir (path);
/* Miramos que no haya error */
if (dir == NULL)
ShowMessage("No puedo abrir el directorio");
/* Una vez nos aseguramos de que no hay error, ¡vamos a jugar! */
/* Leyendo uno a uno todos los archivos que hay */
while ((ent = readdir (dir)) != NULL)
{
FullPath = ent->d_name;
/* Nos devolverá el directorio actual (.) y el anterior (..), como hace ls */
if ( FullPath != "." && FullPath != ".." )
{
FullPath = WideString(path) + "\\" + WideString(ent->d_name);
/* Una vez tenemos el archivo, lo pasamos a una función para procesarlo. */
if(FileExists(FullPath)){ //Esto lo hago para no añadir los directorios a la lista
if(CheckBoxExtension->Checked){ //Si está marcado el checkbox de filtrado por extension entro
if(EditExtension->Text == ExtractFileExt(FullPath)){ //Si coincide la extensión entro
ListBoxSeleccionados->Items->Add(FullPath);
largoMayor = FullPath.Length();
(*nArchivos)++;
}
}else{ //Si no tengo marcado el filtrado por extension entro aquí
ListBoxSeleccionados->Items->Add(FullPath);
largoMayor = FullPath.Length();
(*nArchivos)++;
}
}
}
}
closedir (dir);
return largoMayor;
}
Y en el botón tengo esto:
Código PHP:
if(CheckBoxSelDirectorios->Checked){
for(int i=0; i < FileOpenDialog1->Files->Count; i++){
largoMayor = GetFilesDir(AnsiString(FileOpenDialog1->Files->Strings[i]).c_str(),&nArchivos);
}
}else{
for(int i=0; i < FileOpenDialog1->Files->Count; i++){
ListBoxSeleccionados->Items->Add(FileOpenDialog1->Files->Strings[i]);
if(FileOpenDialog1->Files->Strings[i].Length() > largoMayor)
largoMayor = FileOpenDialog1->Files->Strings[i].Length();
nArchivos++;
}
}
Y en el CheckBox:
Código PHP:
void __fastcall TForm1::CheckBoxSelDirectoriosClick(TObject *Sender)
{
if(CheckBoxSelDirectorios->Checked){
FileOpenDialog1->Options << fdoPickFolders;
CheckBoxExtension->Enabled = true;
EditExtension->Enabled = true;
}else{
FileOpenDialog1->Options >> fdoPickFolders;
CheckBoxExtension->Enabled = false;
EditExtension->Enabled = false;
}
}
Como puedes ver, para el caso de que vaya a seleccionar archivos no hay ningún tipo de filtrado pero si lo que voy a seleccionar son directorios ahí lo filtro en el bucle de la función que recorre todos los directorios seleccionados.
No se como hacer lo que dices de añadir el filtrado para los archivos y ademas tengo que poder eliminar el filtrado cuando se desmarque el checkbox.