Скажем, у вас есть программа, которую вы запускаете, и она имеет следующие строки кода:
#include <fstream>
using std::fstream;
int main() {
fstream someFile;
someFile.open("~/someFile");
if (!someFile.is_open()) {
// Make the file
}
}
Я пытаюсь открыть файл в домашнем каталоге (например, «~» на устройствах Unix). Как это можно сделать? То, что я делаю сейчас, похоже, не работает. Кроме того, как я могу создать файл, если он еще не существует?
Обратите внимание, что эта программа может работать откуда угодно; не просто домой, а мне нужно, чтобы искать файл в домашнем каталоге.
А вот обсуждение того, почему у нас нет прямого API для домашнего каталога: groups.google.com/a/isocpp.org/g/std-proposals/c/8zH7v7ow5bQ
open
имеет второй параметр: openmode
, поэтому вам может понадобиться что-то вроде
someFile.open ("somefile", std::fstream::out | std::fstream::app);
если вы хотите добавить.
Для домашнего каталога вы можете проверить HOME
переменную среды и getpwuid
:
const char *homedir;
if ((homedir = getenv("HOME")) == NULL) {
homedir = getpwuid(getuid())->pw_dir;
}
Что, если вы хотите и читать, и писать в файл?
@zalanshah64 Вы можете установить разные флаги: en.cppreference.com/w/cpp/io/ios_base/openmode
Вот старый пост: Получить домашний каталог в Linux