solucion significado respuesta para internet genios divertidos dime con acertijos acertijo c++ c windows glob

c++ - significado - acertijos para whatsapp



Globos en C++/C, en Windows (5)

¿Hay una manera suave de glob en C o C ++ en Windows?

Por ejemplo, myprogram.exe * .txt envía a mi programa una lista ARGV que tiene ... ARGV [1] = *.txt .

Me gustaría poder tener una función (llamémosla readglob) que toma una cadena y devuelve un vector de cadenas, cada una con un nombre de archivo.

De esta forma, si tengo archivos a.txt b.txt c.txt en mi directorio y readglob obtiene un argumento *.txt , devuelve la lista de archivos anterior.

//Prototype of this hypothetical function. vector<string> readglob(string);

¿Existe tal cosa?


Ehw Tuve que implementar algo como esto en ANSI C hace unos 15 años. Comience con las rutinas ANSI opendir / readdir, supongo. Los globos no son exactamente RegEx, por lo que tendrá que implementar su propio filtrado.


Esto es muy específico de Windows. No sé cómo escribirías esto para ser multiplataforma. Pero lo he usado en programas de Windows y funciona bien para mí.

// Change to the specified working directory string path; cout << "Enter the path to report: "; cin >> path; _chdir(path.c_str()); // Get the file description string desc; cout << "Enter the file description: "; cin >> desc; // List the files in the directory intptr_t file; _finddata_t filedata; file = _findfirst(desc.c_str(),&filedata); if (file != -1) { do { cout << filedata.name << endl; // Or put the file name in a vector here } while (_findnext(file,&filedata) == 0); } else { cout << "No described files found" << endl; } _findclose(file);



Puede haber una mejor manera ahora, pero la última vez que tuve que lidiar con este problema terminé incluyendo la biblioteca de expresiones regulares de Henry Spencer vinculada estáticamente a mi programa (su biblioteca tiene licencia BSD), y luego hice una clase de contenedor que convirtió el usuario Expresiones globales en expresiones regulares para alimentar al código de expresiones regulares. Puede ver / tomar la clase de envoltorio here si lo desea.

Una vez que tenga esas partes en su lugar, lo último que debe hacer es leer el directorio y pasar el nombre de cada entrada a la función correspondiente para ver si coincide con la expresión o no. Los nombres de archivo que coinciden, se agregan a su vector; Los que no los descartan. Leer el directorio es bastante sencillo con las funciones DOS _findfirst () y _findnext (), pero si desea una interfaz C ++ más agradable, también tengo una clase de envoltura portátil para ...


se habló de tenerlo en el sistema de archivos Boost :: pero se descartó a favor del uso de boost :: regex.

Para win32 específico (MFC) puede usar la clase CFileFind