miércoles, 23 de abril de 2008

Listar archivos de un directorio con C/C++

En la aplicación que estoy trabajando actualmente me ha surgido la necesidad de listar los archivos existentes en un directorio dado y listarlos en un "combo box". Dado que estoy desarrollándola para Windows, era obvio buscar una solución para este sistema.

Lo que encontré fue lo siguiente:

HANDLE hFind;
WIN32_FIND_DATA w32fd;
hFind = FindFirstFile( "fonts/*.*", &w32fd );
vector archivos;
if( hFind!=INVALID_HANDLE_VALUE )
{
do
{
TCHAR* Tfilename = w32fd.cFileName;
if( filename.size()>3 )
{
archivos.push_back( filename );
}
}while( FindNextFile( hFind, &w32fd ) );
FindClose(hFind);
}

Esta solución funciona, aunque para mi gusto depende demasiado de las definiciones (chungas) de Microsoft.
Sin embargo, otro acercamiento mucho mas independiente del sistema sería la siguiente, que hace uso de la librería Glib, la cual forma parte de GTK+ y compone multitud de estructuras de datos y funciones preparadas para ser compatibles tanto en windows como en linux.

La solución al listado de los archivos contenidos en un directorio usando las funciones de Glib es la siguiente:


GDir* dir = g_dir_open( folder, 0, NULL );
const gchar* file;
if( !g_file_test( folder, G_FILE_TEST_IS_DIR ) )
{
g_error( "Error: Directory not found FFFFFFFFFFFFF" );
}
else
{
while( file=g_dir_read_name( dir ) )
{
cout << "Fichero encontrado: " << file << endl;
}
g_dir_close( dir );
}

En esta ocasión no dependemos de otra librería más que de glib, disponible tanto para Linux como para Windows. Además de una ganancia en la claridad del código, pues no se usa ninguna estructura extraña (de esas que tanto le gustan a Microsoft). Lo único raro que podemos ver es ese tipo de datos gchar (es simple y llanamente un char) y GDir la cual es una estructura de la que no nos tenemos que preocupar ya que de su manejo se ocupa completamente Glib.

Para más información sobre estas funciones: página de referencia.

4 comentarios:

Anónimo dijo...

Hola, Clinistbud. Soy Natsu, la de Zeitgeist contrastado. Perdóname que no te haya contestado en los comentarios, pero ya están tan liados que igual no encuentras la respuesta, y tampoco estaba segura de que la fueras a buscar, así que he decidido contestarte en tu blog, porque así seguro que ves la respuesta.

Confío en eres el mismo Clinistbud que ha comentado en mis artículos sobre Zeitgeist contrastado. Me arriesgaré ;-)

Me dijiste que:

"Yo también ví Zeitgeist hará un par de meses y para ser sincero me dejó pensativo y preocupado por una conspiración mundial por hacerse por el poder supremo"

Te comento: existen conspiraciones puntuales (como la de Artiach cuando compró Fontaneda para cerrarla, porque quería eliminar competencia y destruir la empresa), pero no una graaan conspiración con los Illuminati y los masones. El dinero y el poder intentan perpetuarse, pero llegan nuevos ricos (como todos los nuevos ricos de China, que hace veinte años eran pobres) y algunos se hunden. No es tan simple como echarle la culpa siempre a los mismos. Las personas con poder intentan ponerse de acuerdo, pero a veces también tienen conflictos de intereses. Por ejemplo, exxon oil y la shell no quieren un coche eléctrico... Pero Japón no tiene petróleo ni puede conseguirlo: en el momento en que Japón consiga hacer funcionar un generador de fusión, mandarán al petróleo a tomar por culo y harán coches eléctricos a casco porro, y la Exxon y la Shell se fastidiarán.

No sé si me explico: no es tan simple como echarle la culpa al mismo grupo, siempre, desde el siglo XVI... unos salen y otros entran. No siempre están de acuerdo. Vigilarles no es tan simple como decir "me negaré a que me pongan un chip". Es más complicado que eso.

"aunque fuí consciente que no debía creerme todo lo que decía, sino más bien me quedé con la idea general y no con sus detalles"
Da gusto saber que la mayoría de la gente lo vio como tú: no para tomárselo del todo en serio, sino como un aviso.
"La parte de la religión no la contrasté (no he contrastado nada, aunque sí he leido todas tus entradas sobre el "documental", debería volver a contrastar tu "versión"? ;) "

Puedes mirar alguna de las fuentes de Zeitgeist al respecto. Por ejemplo, ellos usan como fuente un libro de un tal Albert Churchward, The Origin and Evolution of Religion, que puedes encontrar en inglés en google books (si eres informático, sabes inglés ;-) ). En ese libro, se dice que Horus aparece crucificado, pero como no aparece en Egipto, pues hay que ir a buscar el Horus crucificado en un grabado maya. Y eso es así porque según este libro, hay un culto estelar común a la humanidad que tiene unos 300.000 años. Sólo que hace 300.000 años no existían ni los Neanderthales. Luego el libro tiene un montón más de errores... puedes verlo en la lista de fuentes de la primera parte de Zeitgeist, y leerlo en google books. No te fíes de mí, que podría estar al sueldo del FMI ;-)
"Dejando de lado los ¿errores?, el objetivo de la primera parte, que sinceramente no veo que pinta ahí cuando sin ton ni son se habla del 11-S y de la eco-conspiración, es el hecho de que quiera hacer ver a la gran masa que la religión que aprueba no es poseedora de la verdad absoluta y que proviene de una evolución natural de un seguido de ideas/creencias antiguas."

Bueno, más bien viene de una evolución natural del ser humano. Dios es más compasivo mientras más compasiva es la humanidad. Los dioses egipcios son más amables, fieles y cariñosos que los dioses griegos, porque Egipto era una tierra fecunda que hacía la vida amable. Pero para decir eso basta con un par de libros de historia, eso de irse a buscar un grabado de Horus a México, como que no es muy correcto. Además, el autor del libro ése decía que en el grabado aparecía un elefante... ¿Cuándo ha habido elefantes en América? En fin... Que la idea es buena (alejar a gente de los dogmas y enseñarle a respetar las creencias o no creencias de los demás). Pero está muy mal llevada.

"Quizás el tema más delicado sea el del 11-S, con muchos interrogantes aún. Esa es la parte que más dudas me despierta."

Es la parte que tiene más verdades de todo el documental. No he podido contrastar lo del Thermite, pero de momento lo único que veo erróneo a simple vista es la teoría de que arreando un avionazo a un rascacielos, el rascacielos no se cae, que hay que volarlo desde dentro. Yo no sé si la CIA estuvo detrás de los atentados, o lo sabía y no avisó, pero lo que sí sé es que si le arreas a un edificio un trastazo con un avión, le jodes las estructuras como para que se caiga pero que bien. Piénsalo: si me cargo una planta, imagínate que es la nº 75, de un edificio de 100 plantas, las plantas 76 a 100 van a hacer peso sobre las estructuras dañadas de la 75, hasta que se caigan sobre ella. Y 25 plantas cayéndose sobre una sola provocan un movimiento que se puede cargar toda la estructura del edificio. Ahí no hay mucho donde rascar, si yo voy a estrellar un avión contra un edificio, no hace falta que lo dinamite por dentro, te aseguro que se cae sí o sí. Aunque claro, sólo tengo datos arquitectónicos, habría que hacer la prueba con un rascacielos y ahí el presupuesto no me llega :-)

"El narrador deja bien claro que describen explosiones ANTES del impacto de los aviones, pero solo se ofrece el corte de audio en el que la gente dice "PUM!"
Bueno, yo no puedo saber nada seguro, pero date cuenta que 25 plantas (o las que fueran, no recuerdo) rompiéndose, con sus estructuras dañadas, y cayéndose sobre la que sufrió la destrucción, no pueden hacerlo en silencio. Pero no me hagas caso, que ya especifiqué que para la segunda parte tengo que desempolvar mucho libro de física.

"-Las vigas cortadas en diagonal: esto es en mi opinión, si las imagenes no están trucadas y corresponden realmente al ese lugar y AL MOMENTO JUSTO DE DERRIBARSE (no después de que los técnicos limpiasen la zona) lo más intrigante del "documental"."
Ahí ya no lo sé... yo vi imágenes de la caída y no sólo no ví vigas cortadas, sino que una de las torres se "combó" sobre sí misma al caer... se ve un poco tapado por la nube de polvo pero se ve que la torre no cae exactamente igual que en una demolición controlada. Pero ya te digo, no quiero hablar hasta tener pruebas.

"-El tercer edificio que se derrumba. Creo recordar (hablo de memoria) que ese edificio cayó días después. Si es así no se menciona en ningún momento."
Lo que yo recuerdo (no tengo pruebas, te hablo de memoria) es que hubo que tumbar un tercer edificio debido al daño estructural provocado por el mini-terremoto que produjeron las torres al caer. Me parece una explicación muy posible, pero la tengo que comprobar.

"-Las supuestas explosiones que se ven (pequeñas humarelas antes de derrumbarse la torre) no tienen porque ser explosiones, podrían ser expulsiones de polvo debido a la presión hacia abajo de las plantas superiores al ir cayendo."
Exacto, y el ruido podría ser por lo mismo.

"Bueno resumiendo, espero que pronto habléis de la segunda parte pues la encuentro muy interesante y quizás mas misteriosa en cuanto a las "pruebas" que el "documental" ofrece."
No sé qué decirte. Verás, analice yo lo que analice, lo cierto es que muchas cosas de la segunda parte son verdad: lo del pasaporte, lo de los jihadistas vivos... En el caso de la segunda parte, más me interesa informar sobre el abuso que el gobierno estadounidense ha cometido usando el 11/S, que sobre el atentado. No tengo pruebas de que fuera el gobierno (aunque sí de que hicieron un trabajo chapucero). Pero sí hay pruebas de que intentan asustarnos para retirarnos libertades, y deberíamos impedirlo. Haya sido quien haya sido el que tiró las torres. Por desgracia, comprobar algo así fehacientemente está fuera de mis posibilidades... aunque lo haré lo mejor que pueda.

Un saludo a ti también, gracias por comentar, perdona por tardar tanto en responder.

Anónimo dijo...

la puta que te pario. que tiene que ver con lo que se planteo en el post? sos mogolico?

milton_guty dijo...

porque no Borran este comentario que aparte de ocupar espacio no tiene nada que ver con el tema
me parece ke el amiistrador del foro no esta cumpliendo con su deber quick

blakeyed dijo...

Hola,
Si por casualidad alguien busca como hacerlo en un sistema Linux, puede darse una vuelta por mi web: http://totaki.com/poesiabinaria/2011/09/listar-archivos-dentro-de-un-directorio-o-carpeta-en-c/