Ver Mensaje Individual
  #7  
Antiguo 16-06-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 12
aguml Va por buen camino
A ver, para cuando quiero seleccionar directorios tengo esto:
Código PHP:
int __fastcall TForm1::GetFilesDir(char *pathint *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=0FileOpenDialog1->Files->Counti++){
        
largoMayor GetFilesDir(AnsiString(FileOpenDialog1->Files->Strings[i]).c_str(),&nArchivos);
    }
}else{
    for(
int i=0FileOpenDialog1->Files->Counti++){
        
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.
Responder Con Cita