2009-05-31 23 views
8

Estoy tratando de abrir un archivo en C++ y el servidor en el que se ejecuta el programa está basado en tux.Abrir un archivo en Unix usando C++

string filename = "../dir/input.txt"; works but 
string filename = "~jal/dir1/dir/input.txt"; fails 

¿Hay alguna manera de abrir un archivo en C++ cuando el nombre de archivo proporcionado está en el segundo formato?

Respuesta

12

La expansión ~jal se lleva a cabo por el shell (bash/CSH/lo que sea), no por el propio sistema, por lo que su programa está intentando mirar en la carpeta llamada ~jal/, no /home/jal/.

No soy un codificador C, pero getpwent() puede ser lo que necesita.

+0

+1 para recordar lo básico ... duh .... – ojblass

+0

Quise decir duh por mí, no el póster de la pregunta. – ojblass

+0

Magnus, $ HOME contiene * su * homedir - y ~ jal se expande al directorio de usuario 'jal'. – grawity

9

Puede escanear la cadena, reemplazando ~user por el directorio apropiado.

El POSIX función wordexp hace eso, y algunas otras cosas

  • sustitución de variables, como se puede utilizar $HOME
  • sustitución de orden opcional, como $(echo foo) (se puede desactivar)
  • expansión aritmética, como $((3+4))
  • división de palabras, como dividir ~/a ~/b en dos palabras
  • expansión de comodines, como *.cpp
  • y citando, como "~/a ~/b" es que
+1

+1, no sabía sobre wordexp. – zvrba

Cuestiones relacionadas