Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/03/2013, 10:05
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: abrir cualquier tipo de archivo

"...0 y 1 continuados..."

Bienvenido a matrix :) De echo tampoco son 0 y 1, sino que son la representacion humanamente inteligible de una carga electrica almacenada en uno o varios sectores referenciados por plato / cara / cilindro / pista ...

"...estructura basada en un plato con circulos concentricos basados en algun material (depende del fabricante) de baja resistencia magnetica con algun oxido que reacciona facilmente al magnetismo y de baja oxidacion (depende nuevamente del fabricante), con lectoras magneticas con capacidad (el toston sigue 20 parrafos como minimo)..."

Bienvenido a google :))

Creo entender que lo que busca cajojeca es el listado de un directorio y por defecto la lectura de un archivo (supongo que mas adelante implementará algo mas concreto). La idea es: dada una ruta comprovar si es o no es un archivo, en caso que lo sea leerlo, y en caso que no lo sea considererlo un directorio, listar directorio, buscar primer archivo y leer. Tecnicamente no existe una forma estandarizada de trabajar archivos, las funciones adaptadas a ello dependen del sistema operativo (hay atajos para comprovar la existencia de un archivo pero pueden fallar, el p.ej. fopen parece que sirve para comprovar la existencia de un archivo pero pueden darse casos de falso resultado). Puede que haya alguna libreria preparada para funcionar en varios sistemas, no se es cuestion de buscar.

Con las funciones de c, puedes implementar algo que en casos habituales funcionará sin problema basandote en que lo que necesitas es leer el archivo, luego si no es leible es que o no es accesible, o no es un archivo o es un directorio, y siguiendo con la misma logica si no es leible lo tratas como un directorio e intentas listarlo, si no es listable es que o es un directorio no accesible o simplemente no es un directorio, si es listable buscas el primer archivo y repites los pasos: lo tratas como un archivo, si no es leible es que o no es accesible o no es un archivo, etc etc y asi repitiendo hasta que te cansaras de explorar directorios.

Si quieres hacerlo con wildcards (tal como te comenta carbon): o usas funciones propias del sistema o te creas tus propias funciones para separar el directorio del archivo, listar el directorio y comparar con el nombre de archivo (incluida la extension, o la parte de la extension, o el wildcard o por su defecto solo el nombre). Una vez localizado el archivo intentas acceder para lectura, si obtienes un erros significa que estas ante un subdirectorio, o estas ante un archivo para el que no tienes permiso de acceso para lectura o simplemente es una ruta que no existe. Si obtienes acceso pues ya lo tienes; si no tienes acceso lo tratas como subdirectorio y haces un nuevo listado.

No cuelgo nada de codigo, podria hacerse eterno encontrar todas las posibles implementaciones para la solucion. Si sabes de antemano que siempre vas a proporcionar un archivo sin extension (aunque el archivo objetivo la tenga o no la tenga, es igual), la cosa se complica:

Código:
miarchivo.txt        29/03/2013 - 16:22:56 123 kb
miarchivo.dat       46/03/2013 - 16:22:56 456 b
miarchivo             29/03/5000 - 16:22:56 789 mb
miarchivo.aaa      27/03/2013 - 16:22:56 0kb
Que archivo seleccionas como valido? Si todos son 'miarchivo', lo ordenas por fechas, por tamaños, por extension...?

Simplificando un poco mas, si sabes de antemano que vas a proporcionar un nombre de archivo (sin extension aunque el original la tenga) y que en ese directorio solo habrá un archivo llamado igual que ese y que ademas será accesible como lectura, entonces tienes la solucion con funciones de sistema para definir la ruta completa. La idea seria localizar el archivo (con wildcards para la extension o sin nada, las funciones de sistema suelen ser capaces de buscar), recoger su ruta absoluta y acceder para lectura. En windows puedes buscar un archivo con FindFirstFile (acepta *), esto te proporciona una serie de datos del archivo (a traves de la struct WIN32_FIND_DATA tienes el elemento cFileName que contendrá el nombre completo, extension incluida), seleccionas la ruta al directorio de la ruta proporcionada y accedes al nombre de archivo encontrado o sustituyes el nombre de archivo incompleto de la ruta proporcionada por el nombre de archivo completo encontrado y ya tienes acceso al archivo, a partir de ese momento ya puedes cargar con las funciones estandar de C o puedes leer con las propias de windows. Supongo que esto mismo puede traducirse a linux y a otros sistemas.

Siento no colgar nada de codigo. Por cierto, con que finalidad quieres implementar este codigo? Lo digo porque puede darse el caso que haya otras soluciones.

Saludos
vosk