Пути C++, начинающиеся с ~
Есть ли здесь возможность использовать пути, начинающиеся с "~" в кодах C++ в linux? Например, этот код не работает правильно:
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
ofstream myfile;
myfile.open ("~/example.txt");
myfile << "Text in file .\n";
myfile.close();
return 0;
}
1 ответ
Я полагаю, вы работаете в системе Linux или POSIX с пониманием интерактивной оболочки ~
(например bash
)
На самом деле, пути к файлам начинаются с ~
почти никогда не бывает (вы можете создать такой каталог с mkdir '~'
в оболочке, но это было бы извращением). Помните, что ваша оболочка использует аргументы, поэтому ваша оболочка (а не ваша программа!) Заменяет ~
например /home/martin
когда вы печатаете myprogram ~/example.txt
как команда в вашем терминале. Смотрите глоб (7). Возможно, вы захотите использовать glob(3) или wordexp(3) внутри вашей программы на C++ (но вам нужно делать это только в том случае, если "~/example.txt"
Строка происходит из некоторых данных - например, из некоторого файла конфигурации, из пользовательского ввода и т. д.)
Иногда вы можете просто использовать getenv(3) для получения домашнего каталога (или getpwuid(3) с getuid (2)). Возможно, вы могли бы сделать
std::string home=getenv("HOME");
std::string path= home+"/example.txt";
ofstream myfile(path);
Если вы серьезно, вы должны проверить, что getenv("HOME")
не возвращается NULL
, На практике это вряд ли произойдет.
Смотрите также это.