2009-05-31 1 views
8

Sto tentando di aprire un file in C++ e il server su cui è in esecuzione il programma è basato su tux.Apertura di un file su unix utilizzando C++

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

C'è un modo per aprire un file in C++ quando il nome file fornito è nel secondo formato?

risposta

12

L'espansione ~jal viene eseguito dalla shell (bash/csh/altro), non dal sistema stesso, in modo che il programma sta tentando di esaminare la cartella denominata ~jal/, non /home/jal/.

Non sono un codificatore C, ma getpwent() potrebbe essere quello che ti serve.

+0

+1 per ricordare le basi ... duh ... – ojblass

+0

intendevo duh da me non il poster della domanda. – ojblass

+0

Magnus, $ HOME contiene * il tuo * homedir - e ~ jal si espande nel homedir dell'utente 'jal'. – grawity

9

È possibile eseguire la scansione della stringa, sostituendo ~user dalla directory appropriata.

La POSIX funzione wordexp lo fa, e un paio di altre cose

  • sostituzione delle variabili, come è possibile utilizzare $HOME
  • sostituzione di comando opzionale, come $(echo foo) (disattivabile)
  • espansione aritmetica, come $((3+4))
  • divisione di parole, come splittare ~/a ~/b in due parole
  • espansione jolly, come *.cpp
  • e citando, come "~/a ~/b" resta che
+1

+1, non sapevo di wordexp. – zvrba