Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Manejo de directorios de mnera estandar. C

Estas en el tema de Manejo de directorios de mnera estandar. C en el foro de C/C++ en Foros del Web. Hola. Alguna vez hice una pregunt similar, pero al parecer no hubo nada estandar. Quiero hacer una aplicacion que maneje directorios y archivos, como un ...
  #1 (permalink)  
Antiguo 01/04/2006, 11:52
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Manejo de directorios de mnera estandar. C

Hola. Alguna vez hice una pregunt similar, pero al parecer no hubo nada estandar. Quiero hacer una aplicacion que maneje directorios y archivos, como un browser(no de internet). La interface y todo lo grafico ya lo tengo, solo quiero saber cual es la manera mas estandar para por ejemplo ver todos los archivos de un directorio.
No quiero usar llamadas al sistema ya que la aplicacion debe de ser lo mas portable posible. La aplicacion es de consola, por lo tanto tampoco quiero usar la API de w32.

Saludos
  #2 (permalink)  
Antiguo 01/04/2006, 15:13
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Efectivamente lo que pedis no existe. Podes usar opendir, readdir y closedir en la mayoria de *NIX y tambien podes implementar estas funciones para Windows en un modulo aparte.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 01/04/2006, 16:31
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
El estándar POSIX define operaciones sobre ficheros y directorios:

Cita:
POSIX.1, Core Services (incorporates Standard ANSI C)
...
* File and Directory Operations
...
El problema es que Windows no cumple este estándar, aunque si usas cygwin se resuelven muchos problemas, porque acerca a Windows bastante más a POSIX. Ahora, no he comprobado si cygwin ha portado esas operaciones sobre directorios.
  #4 (permalink)  
Antiguo 01/04/2006, 16:34
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
http://www.two-sdg.demon.co.uk/curbr...nt/dirent.html

Estas funciones existen en Windows si programas para el subsistema POSIX, que es en realidad una abstraccion bastante limitada del mismo (solo POSIX 1003.1). Por cierto, no es posible mezclar el subsistema POSIX con el subsistema Windows en un mismo programa.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 01/04/2006, 20:50
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Bueno. mi compilador es cygwin pero cross-compiler. Si no, puedo usar el metodo de lista de archivos fija, que es muy incomoda pero facil. Aun asi, si tienen mas info, mejor,

Gracias
  #6 (permalink)  
Antiguo 01/04/2006, 21:22
 
Fecha de Ingreso: enero-2006
Ubicación: mi casa
Mensajes: 255
Antigüedad: 19 años
Puntos: 0
C es un lenguaje portable no?
entonces por que no usas las directivas del compilador

por ejemplo:

#ifdef WIN32
#include <windows.h> /* <- aqui tienes las API's para listear directorios en este caso FindFirstFile, FindNext y FindClose
#else
#include <elincludeparasistemas*nix.h>
#endif

y te codeas dos procedimientos que listeen directorios
uno usando el opendir, readdir etc. y otro usando las apis de windows y decidiendo cual compilar usando las directivas #ifdef #endif

#ifdef WIN32
listeardirectorio_windowsapi()
#else
listeardirectorio_unix()
#endif


sería un poco más de trabajo, pero tendrías tu aplicación que compilara y funcionara tanto bajo windows como sistemas *nix.

un saludo.
  #7 (permalink)  
Antiguo 01/04/2006, 21:40
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Si pense en usar el precompilador, pero como lo de portable no me referia precisamente a windows-unix/linux pues intente buscar una forma que fuera del mismo estandar, pero veo que no hay asi que para cada sistema que quiera portar mi aplicacion tendre que usar rutinas diferentes, aun asi, la idea de usar las directivas no es mala.
Saludos
  #8 (permalink)  
Antiguo 02/04/2006, 00:59
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Cita:
Iniciado por Instru
Si pense en usar el precompilador, pero como lo de portable no me referia precisamente a windows-unix/linux pues intente buscar una forma que fuera del mismo estandar, pero veo que no hay asi que para cada sistema que quiera portar mi aplicacion tendre que usar rutinas diferentes, aun asi, la idea de usar las directivas no es mala.
Saludos
Por eso te recomiendo hacer un modulo (de la manera que quieras, .CPP, .LIB, incluso .DLL) donde encapsules esa funcionalidad para Windows y despues le pases el archivo correspondiente (.OBJ o .LIB codigo-importacion) al enlazador. De esta manera el codigo fuente de la lectura de directorios seria identico en cada plataforma y ademas podrias reutilizarlo siempre. Mira el link que te deje.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 02/04/2006, 11:17
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Muy util, gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:57.