Título: Hallar directorios con espacios C Publicado por: Tauron en 29 Mayo 2019, 18:27 pm Hola buenas! Soy nuevo en el foro aunque ya lo he visitado muchas veces para distintos problemas.
La cuestion es que he escrito un codigo en C para poder eliminar los x primeros caracteres de todos los archivos encontrados en una ruta especifica. El programa funciona con direcciones simples aunque no llega a ser muy robusto porque es para uso propio y me da bastante igual. El problema ocurre cuando trato de poner (o arrastrar) una dirección que contiene espacios. No me reconoce la ruta y por lo tanto el programa es incapaz de listarme los archivos. He probado insertando la ruta con comillas o sin, pero sin exito. Si alguien encuentra el problema le estaré muy agradecido. No encuentro soluciones por la web. (Apenas llevo meses programando. Solo se C y el tema de directorios y dirent.h no lo conocia) Estoy en Windows con Dev-c++ Código: #include <sys/types.h> Título: Re: Hallar directorios con espacios C Publicado por: @XSStringManolo en 30 Mayo 2019, 04:10 am Prueba de varias formas, te lo pongo en pseudocidigo:
cadenaComillasDobles = '"'; //Metes las comillas dobles entre comillas simples. Si no te acepta las comillas pon = '/"'; rutaEntrecomiklada = cadenaComillasDobles + ruta + cadenaComillasDobles; Si no te funciona en vez de comillas dobles usa comillas simples. Si no funciona prueba cambiando el espacio por _ Y si sigue sin funcionar metele la barra de escape en la ruta antes de cada espacio. Tendras que poner doble barra de escape para que se te guarde 1 barra de escape antes del espacio de la ruta: PrimeraParteDeLaRuta= "Desktop\\Nueva"; EscapeDeEspacio = "\\"; SegundaParteDeLaRuta = " Carpeta"; rutaFinal = PrimeraParteDeLaRuta + EscapeDeEspacio +SegundaParteDeLaRuta; Al imprimir la rutaFinal saldria en pantalla: Desktop\Nueva\ Carpeta Y se abriria Nueva Carpeta funciona así en algunos casos. Prueba todas esas, alguna funcionara. Título: Re: Hallar directorios con espacios C Publicado por: RayR en 30 Mayo 2019, 19:21 pm La función opendir acepta las rutas únicamente sin comillas, por lo tanto, lo de arrastrar el directorio no va a funcionar bien. Si arrastras una carpeta sin espacios en su nombre a la ventana de ejecución del programa, se pegará su nombre tal cual. Ejemplo:
Ruta de los archivos: c:\carpeta Esto te va a funcionar correctamente. Pero si el directorio tiene espacios, Windows le agregará comillas: Ruta de los archivos: "c:\mi carpeta" Y ahí ya no va a funcionar. Así que es mejor que sólo le pidas al usuario que teclee las rutas, y sin comillas. De esa manera: Ruta de los archivos: c:\mi carpeta Te debe funcionar sí o sí. Si aún así te falla, estarás escribiendo algo mal. Título: Re: Hallar directorios con espacios C Publicado por: Tauron en 30 Mayo 2019, 21:26 pm VALE! Tras mucho buscar ya he encontrado el problema. No se trata de los espacios, sino de los acentos.
Por alguna razón el programa se pasa la tabla ASCII por donde le place y cada vez que encuentra algún caracter con acento, lo interpreta como otro totalmente distinto. (por ejemplo la vocal "ú" la interpreta como si fuese "·") Como solución he hecho printf de cada vocal con sus acentos para ver cómo lo interpreta la consola. De esta manera identificar los acentos y modificar en el input la vocal por el carácter que entienda la consola, así en el output saldrá la vocal con el acento de manera correcta y la ruta acaba funcionando. EN FIN, una movida por no tener en cuenta que estaba en windows. Estoy acostumbrado a utilizar linux y no tenia problemas con caracteres especiales. Título: Re: Hallar directorios con espacios C Publicado por: RayR en 30 Mayo 2019, 21:42 pm Sólo por curiosidad, y dejando de lado caracteres especiales, si arrastras un directorio con espacios a la ventana de tu programa, Windows le añade comillas, ¿cierto? Y de ser así, ¿lo acepta correctamente opendir? Porque hasta donde sé, Windows sí que las añade y así ya no funciona. A menos que haya cambiado el funcionamiento :o.
Editado: Se me olvidó lo principal que iba a poner. Eso de los acentos en Windows lo podrías solucionar llamando a este par de funciones (incluye <windows.h>): Código
Con eso configuras la entrada y salida a la codificación latina. |