Ver la versión completa : [Ayuda] Pistas para navegador de directorios y archivos en C.
Neodreamer
18/05/2012, 00:02
Buenas, estoy intentando hacer un navegador de archivos y carpetas sin entorno grafico, como lo fue el file commander en su dia o como son basicamente los cargadores de roms de cualquier emu, el caso es que solo he conseguido lo siguiente:
Para mostrar o listar carpetas y archivos:
system("dir /B")
Para ir a una ruta directamente:
chdir (ruta)
El problema es que no se como cambiar rutas sin teclado...solo con los botones de la consola y sin entorno grafico.
Se me ocurrio hacer lo siguiente (no se rian please que estoy empezando... y hace siglos que no programaba.)
system("dir /B") //Para verlo en pantalla
system("dir /B >> temp.txt) // para guardar temporalmente el listado de carpetas y archivos donde estoy
posteriormente, pretendo meter cada linea de ese txt, a cadenas de un array bidimensional para segun pulses arriba o abajo, con un contador o flag, saber a que linea corresponde y pasarselo como valor a chdir...
Eso es una gran chapuza?
Como se hace realmente?
Por favor, una ayuda, me gustaría ir poco a poco metiendo extras tipo copiar, pegar, cortar, etc.
Muchas gracias
p.d: Lo he puesto aqui, xq pretendo que sea para Caanoo y windows, pero sobre todo para por ejemplo, si alguien me dice, tengo unas fotos, documentos o o que sea en el pendrive que son la leche, poder pincharlo, navegar por carpetas, copiarlo a mi SD sin necesidad de un PC o similares y de paso mejorar cada vez un poco mas en esto de programacion en C.
Las funciones estándar para leer directorios están en dirent.h. Aquí su documentación: http://www.gnu.org/software/libc/manual/html_node/Accessing-Directories.html#Accessing-Directories
Una de las ventajas de la scene es que mucho del código es libre. Puedes mirar cualquiera del código del programa que más te guste y verás algún ejemplo de gestión de directorios. El caso más evidente son los emuladores: busca el código del emulador que más te guste y aprende.
Me costa por ejemplo que lemonboy incluye un navegador de archivos...
Neodreamer
18/05/2012, 02:01
Muchas muchas muchas gracias.... lo mirare a ver que saco y en cuanto tenga algo minimamente decente, si lo tengo, lo pongo aqui para todos.
Un saludo
También tienes el código fuente del Selector, portado por Misato, ahí puedes ver cómo se recorre un directorio en Linux.
Neodreamer
18/05/2012, 13:06
Esta en su blog verdad?
Misato gracias adelantadas, echare un ojo.
Gracias Hardyx
Nathrezim
18/05/2012, 13:25
Las funciones estándar para leer directorios están en dirent.h. Aquí su documentación: http://www.gnu.org/software/libc/manual/html_node/Accessing-Directories.html#Accessing-Directories
Además es multiplataforma (funciona en tu PC sea el sistema operativo que sea, y en la consola), por lo que podrás depurar en tu máquina local si tienes dos targets de compilación, es decir, que el mismo código funciona en las dos plataformas.
Neodreamer
18/05/2012, 13:35
Genial, una cosa, en el codigo de Misato, he visto esto:
char *uppercase (char * cadena)
{
...
}
Que es uppercase? no lo que hace sino que es en C... porque he dado punteros, *uppercase
He dado funciones, char uppercase(paso por valor o referencia);
pero una funcion puntero? y ese asterisco suelto dentro de los argumentos?
Gracias
edit: y cuando ponen doble asterisco?
char** ReadConfig(); que tipo de funcion declara con esos asteriscos?
Estás muy verde con el C. :) Que no te confundan los espacios en blanco. char *uppercase() es lo mismo que char* uppercase(), es decir una función que devuelve una cadena de carácteres. Mejor dicho, crea una cadena de carácteres y devuelve un puntero a su primer carácter. Vamos, una cadena de C. Y el parámetro char * cadena, es lo mismo que char* cadena, es decir un parámetro que acepta una cadena de carácteres de entrada. Es decir, un puntero al primer carácter de una cadena.
Neodreamer
18/05/2012, 14:13
Y tan verde... solo habia dado el puntero en funcion como paso por referencia en argumentos, nunca como devolucion de la propia funcion. "interesante".
Creia que solo se podia, "dato a devolver nombre_funcion(dato recibido por valor, dato recibido por referencia en *puntero);
Pero veo que hay mas opciones... jejejeje
Y lo del doble asterisco?
char** ReadConfig() es una función que devuelve un puntero a punteros de carácteres, o lo que es lo mismo en C, un array de cadenas. Una lista de cadenas para que lo entiendas. En C los arrays son punteros. Es lo mismo poner int numeros[], que poner int *numeros;
Neodreamer
18/05/2012, 14:18
Entonces si pongo int** numeros; es lo mismo que int numeros[][]?????
Ahí le has dado. Pero ten en cuenta que si lo pones como puntero, eres responsable de reservar memoria para ese array. Si lo haces como int numeros[10][10], es un array estático y te lo reserva el compilador. En el caso de las funciones que devuelven punteros, son las funciones las que lo reservan.
Neodreamer
18/05/2012, 14:55
oh jojojo, acabas de abrirme los ojos a mi y a mi profesor (creo) porque cada ejercicio que haciamos de arrays o cadenas, siempre reservaba un valor fijo e incluso lo ponia como define y yo le decia que para eso era mejor cuando jugabamos con bucles y tal, poner el array como puntero y luego averiguar con strlen el maximo que media para jugar con el bucle for o while, etc...
Odio los punteros, pero cada vez le voy viendo mas utilidad ;)
Gracias
P.D: tambien estoy con ensamblador(empezando totalmente, mas en segundo) para pics en este ciclo superior de electronica, por si quereis ayudarme jejejejeje
Está bien poner una longitud fija en los arrays hasta que no sepas manejar bien la memoria dinámica, porque si estás aprendiendo y te metes con memoria dinámica vas a flipar en colores. Aún así, no puedes usar char *p para guardar una cadena sin asignarle memoria primero (con malloc o new), o apuntar a algo ya asignado.
Neodreamer
18/05/2012, 22:34
Gracias, justo hoy hemos empezado eso en clase con las pilas, memoria dinamica, etc.
A ver si le voy cogiendo el tranquillo. Nos queda solo este tema, el de ficheros y ya despues programacion pic con Ansi C. (Aparte de lo que ya estanis dando en ensamblador)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.