Открытие файла в Unix с помощью C ++ - PullRequest
8 голосов
/ 31 мая 2009

Я пытаюсь открыть файл на c ++, а сервер, на котором работает программа, основан на смокинге.

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

Есть ли способ открыть файл на c ++, если имя файла указано во втором формате?

Ответы [ 3 ]

12 голосов
/ 31 мая 2009

Расширение ~jal выполняется оболочкой (bash / csh / что угодно), а не самой системой, поэтому ваша программа пытается просмотреть папку с именем ~jal/, а не /home/jal/.

Я не программист на C, но getpwent() может быть то, что вам нужно.

9 голосов
/ 31 мая 2009

Вы можете отсканировать строку, заменив ~user на соответствующий каталог.

Функция POSIX wordexp делает это, и некоторые другие вещи

  • подстановка переменных, как вы можете использовать $HOME
  • необязательная подстановка команд, например $(echo foo) (может быть отключена)
  • арифметическое расширение, как $((3+4))
  • разделение слов, как разделение ~/a ~/b на два слова
  • расширение подстановочного знака, как *.cpp
  • и цитирование, как "~/a ~/b" остается, что
3 голосов
/ 31 мая 2009

Вот готовый кусок кода, который выполняет эту задачу:

Как мне развернуть `~ 'в имени файла, как это делает оболочка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...