• Jueves 14 de Noviembre de 2024, 17:03

Autor Tema:  Leer El Contenido De Un Directorio[c]  (Leído 4288 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Leer El Contenido De Un Directorio[c]
« en: Martes 13 de Marzo de 2007, 01:38 »
0
Hola, que formas existen para poder leer el contenido de un directorio en C?, bajo windows.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #1 en: Martes 13 de Marzo de 2007, 09:37 »
0

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #2 en: Miércoles 14 de Marzo de 2007, 14:23 »
0
Muchas Gracias. Se me ocurrio hacerlo de una forma sin utilizar la API de windows para probar a ver como salia. A mi lo que me interesa es conocer que subdirectorioas hay dentro de un determinado directorio, para eso se me ocurrio ejecutar un comando desde DOS y crear un archivo con el contenido de los subdirectorios y luego desde C leer este archivo y despues eliminarlo.
El comando que ejecuto de DOS es el siguiente:
Código: Text
  1. DIR F: /B /A:D > C:\\ListOfDirectories.txt
  2.  
funciona perfecto para lo que lo necesito. Crea el archivo bien. Este es el contenido:
Citar
RECYCLER
Rocky.Balboa
System Volume Information
Ahora bien, si ejecuto este comando desde C con la funcion system, el resultado es el siguiente:
Citar
RECYCLER
ROCKY~1.BAL
SYSTEM~1
O sea, me deja utilizar nada mas que 8 caracteres para el nombre y tres para la extension. Como puedo hacer para lanzar el comando y que cree el archivo como lo puedo hacer desde fuera de C?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #3 en: Miércoles 14 de Marzo de 2007, 14:32 »
0
Si queres recurrir a soluciones propias adelante.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #4 en: Miércoles 14 de Marzo de 2007, 14:37 »
0
Cita de: "Eternal Idol"
Si queres recurrir a soluciones propias adelante.
mi idea es hacer el codigo mas portable, porque si lo quiero compilar para ejecutar en linux solo tengo que cambiar una linea en lugar del 90% del codigo, pero me tope con este inconveniente.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #5 en: Miércoles 14 de Marzo de 2007, 14:46 »
0
Cita de: "AnioN"
mi idea es hacer el codigo mas portable, porque si lo quiero compilar para ejecutar en linux solo tengo que cambiar una linea en lugar del 90% del codigo, pero me tope con este inconveniente.
Esta bien, podes tomar ese camino pero a simple vista para mi es lo que en España denominan chapuza, estar llamando a un comando para grabar en un archivo, despues procesar ese archivo y finalmente tener que borrarlo, todo eso para leer unos subdirectorios ... incluso no se cuan portable sera ya que dudo que dir y ls devuelvan el mismo formato y sean llamados con los mismos parametros.

Es preferible que busques algo que exista en *NIX y lo portes a Windows o definas una funcion y tengas diferente codigo para cada S.O., a cierto nivel siempre vas a encontrar que C/C++ no tienen definido un standard y dependes de la API del S.O. y no podes estar haciendo (SEGUN MI PUNTO DE VISTA) operaciones innecesarias para conseguir el mismo objetivo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #6 en: Miércoles 14 de Marzo de 2007, 15:15 »
0
tenes razon, es mejor perder mas tiempo programando para obtener un mejor rendimiento.
Muchas Gracias por la recomendacion.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #7 en: Miércoles 14 de Marzo de 2007, 15:20 »
0
Cita de: "AnioN"
tenes razon, es mejor perder mas tiempo programando para obtener un mejor rendimiento.
Muchas Gracias por la recomendacion.
No solo hay que tener en cuenta el rendimiento sino tambien la complejidad, de esa manera estas haciendo que la obtencion de unos subdirectorios implique una llamada para ejecutar un comando del sistema, que acarrea la creacion de un archivo, su lectura (con su correspondiente proceso) y su posterior borrado. Desde mi punto de vista son demasiados pasos para algo que deberia ser mucho mas simple.

 :comp:  :comp:  :comp:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #8 en: Domingo 1 de Abril de 2007, 23:10 »
0
lo intente usar con la api de windows pero tengo un error y todavia no logro solucionarlo.

Código: Text
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. int main()
  6. {
  7.   WIN32_FIND_DATA FindFileData;
  8.   HANDLE hFind;
  9.  
  10.   hFind = FindFirstFile("c:\\", &FindFileData);
  11.   if (hFind == INVALID_HANDLE_VALUE)
  12.   {
  13.     printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
  14.   }
  15.   else
  16.   {
  17.     printf ("The first file found is %s\n", FindFileData.cFileName);
  18.  
  19.     FindClose(hFind);
  20.   }
  21.  
  22.   getch();
  23.   return 0;
  24. }
  25.  

el error es:
Citar
Invalid File Handle. GetLastError reports 2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #9 en: Domingo 1 de Abril de 2007, 23:26 »
0
hFind = FindFirstFile("c:\\*", &FindFileData);

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #10 en: Lunes 2 de Abril de 2007, 14:36 »
0
Muchas Gracias. Me surgio una duda. Cuando programas usando la API, como haces para conocer los campos de las estructuras?, en el MSDN esta, pero el ide que usas tiene intellisense?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #11 en: Lunes 2 de Abril de 2007, 14:52 »
0
Cita de: "AnioN"
Muchas Gracias. Me surgio una duda. Cuando programas usando la API, como haces para conocer los campos de las estructuras?, en el MSDN esta, pero el ide que usas tiene intellisense?
Yo uso Visual Studio .NET 2003/2005 y si tienen Intellisense que es de gran ayuda cuando YA conoces los campos de una estructura o al menos el que estas buscando. Pero no sirve para conocer el campo en si mismo ya que no posee la descripcion detallada que provee la MSDN. En sintesis es una ayuda para la escritura del codigo en si misma pero no para la comprension de una estructura.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #12 en: Jueves 5 de Abril de 2007, 17:56 »
0
si programás bajo consola tb podes usar las siguiente funciones que son compatibles con DOS y creo que con UNIX tb...

Código: Text
  1.  
  2. int findfiles(char *orig){
  3.   struct dirent *pfile;DIR *opdir;
  4.  
  5.   if((opdir=opendir(orig))==NULL){
  6.     printf("Acceso Denegado a %s\n",orig);
  7.     return -1;
  8.   }
  9.  
  10.   if((pfile=readdir(opdir))!=NULL){
  11.     do{
  12.       printf("%s\n",pfile->d_name);
  13.     }while((pfile=readdir(opdir))!=NULL );
  14.   }return 0;
  15. }
  16.  
  17.  

S2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #13 en: Jueves 5 de Abril de 2007, 18:10 »
0
Cita de: "Karman"
si programás bajo consola tb podes usar las siguiente funciones que son compatibles con DOS y creo que con UNIX tb...
Esta muy bien que quieras colaborar pero mejor espera a que haya una pregunta donde puedas responder y no este ya resuelta:

Hola, que formas existen para poder leer el contenido de un directorio en C?, bajo windows.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #14 en: Jueves 5 de Abril de 2007, 19:18 »
0
me refería a la consola de windows...  :hola:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #15 en: Jueves 5 de Abril de 2007, 19:23 »
0
Cita de: "Karman"
me refería a la consola de windows...  :hola:
Entonces fue tu error el mencionar a DOS. Igualmente opendir no es una funcion de Windows ni es una funcion standard de C.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #16 en: Jueves 5 de Abril de 2007, 19:32 »
0
opendir está definida en la librería "dirent.h" y según mi archivo de ayuda de librerías estándares de la GNU, es standart...  :kicking:

S2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #17 en: Jueves 5 de Abril de 2007, 19:35 »
0
Cita de: "Karman"
opendir está definida en la librería "dirent.h" y según mi archivo de ayuda de librerías estándares de la GNU, es standart...  :kicking:
http://en.wikipedia.org/wiki/Dirent.h

dirent.h is the header in the C POSIX library for the C programming language that contains constructs that facilitate directory traversing. The function is not part of the C standard, but is considered "pseudo-standard" and is reliably portable between platforms.

Y por cierto que menciones la consola no tiene nada que ver, si esas funciones existieran en C las podrias usar en programas con GUI perfectamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #18 en: Jueves 5 de Abril de 2007, 19:41 »
0
bueno... en el archivo de que tengo lo toma directamente como standart... capaz les faltó ponerle el "Pseudo"...

2º es obvio que si funciona en consola funciona en el modo GUI, pero no es del grupo de las funciones que windows define para trabajar en el modo GUI, es más en el MSDN no aparece... va... el que yo tengo por lo menos no...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #19 en: Jueves 5 de Abril de 2007, 19:45 »
0
Cita de: "Karman"
bueno... en el archivo de que tengo lo toma directamente como standart... capaz les faltó ponerle el "Pseudo"...

2º es obvio que si funciona en consola funciona en el modo GUI, pero no es del grupo de las funciones que windows define para trabajar en el modo GUI, es más en el MSDN no aparece... va... el que yo tengo por lo menos no...
El archivo que tenes puede decir lo que quiera y no aparece en la MSDN por lo que te dije antes: NO ES STANDARD DE C. Esa es la razon por la cual VC++ no soporta esas funciones y ni siquiera tiene el dirent.h en sus includes.

Si es tan obvio entonces no se para que empezaste tu respuesta asi:
si programás bajo consola tb podes usar las siguiente funciones que son compatibles con DOS y creo que con UNIX tb...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Leer El Contenido De Un Directorio[c]
« Respuesta #20 en: Jueves 5 de Abril de 2007, 20:06 »
0
Citar
Si es tan obvio entonces no se para que empezaste tu respuesta asi:
si programás bajo consola tb podes usar las siguiente funciones que son compatibles con DOS y creo que con UNIX tb...

porque sí... no tengo respuesta para eso...  :P

S2