La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45063 - ¿CóMO ABRIR UN ARCHIVO EN UNA RUTA CON ESPACIOS?
Autor:  fasto g
Hola,

estoy usando el Visual C++ 6.0 y en una de las funciones, me necesita abrir un archivo (en realidad lo crea porque antes no existe) y utiliza la función:

fopen("..\\dat\\archivo.html","w");

es una ruta dinámica porque necesito poder copiarlo donde sea el programa y que funcione, claro pero en los dos puntitos hay una ruta con espacios "c:\Documents and Settings" y me responde el programa diciendo que no se puede encontrar la ruta "c:\Documents"; ¿Cómo puedo evitar ese problema sin cambiar de ruta? ¿Existe alguna función? ¿alguna sugerencia?

Muchas gracias

  Respuesta:  cracksant dk
simplemente averiguate la forma de obtener nombres cortos
de directorios..
en el caso de documents and setting es:DOCUME~1

QUE SEA DE PROVECHO...!

  Respuesta:  fasto g
Eso sí lo sabía. El problema es que, por lo visto, en Visual C++ (supongo que en c también) no me deja poner una ruta que contenga espacios, como "c:\documents and settings". Al final, he cambiado de ruta y punto pero ya es más curiosidad científica y cabezonería.

El ejecutable está en una carpeta "bin" y el archivo html en otra distinta, y necesito que sea así. Por eso le pongo ..\\dat\\archivo.html: necesito que salga de la carpeta "bin" y entre en la carpeta "dat".

La solución sería, creo, "engañar" a c de alguna forma para poder poner esa ruta. Había pensado que quizás haya alguna manera de coger la ruta de ms-dos, que no hay problema, y actuar a partir de ella pero no sé si eso es factible. ¿Alguna otra sugerencia?

Muchas gracias de todas formas!

  Respuesta:  Yadisnel
Hola, creo que lo que le sucede a tu aplicación es que pierde la ruta pues si lo que quieres es que se ejecute en cualquier parte que lo copies debe hacer lo siguiente:
en ves de:
fopen("..\\dat\\archivo.html","w");

pon:

fopen(".\\archivo.html","w");

esto hace que busque el fichero donde tienes el ejectable de la aplicación.

Si tienes el ejecutable en una carpeta de esta forma:
carpeta de la aplicación\ carpeta de datos y en lacarpeta de la aplicación tienes el ejecutable debes poner:

fopen(".\\carpeta de datos\\archivo.html","w");
esto hace que a partir de donde está el ejecutable busque carpeta del archivo.html(carpeta de datos) y lo lea.

en esencia " .\\" busca a partir del ejecutable.

Dime si te funciona o que error te pueda dar.
Salu2s ...Yadisnel.