Открытие файла в домашнем каталоге

Скажем, у вас есть программа, которую вы запускаете, и она имеет следующие строки кода:

#include <fstream>
using std::fstream;

int main() {
     fstream someFile;
     someFile.open("~/someFile");

     if (!someFile.is_open()) {
          // Make the file
     }
}

Я пытаюсь открыть файл в домашнем каталоге (например, «~» на устройствах Unix). Как это можно сделать? То, что я делаю сейчас, похоже, не работает. Кроме того, как я могу создать файл, если он еще не существует?

Обратите внимание, что эта программа может работать откуда угодно; не просто домой, а мне нужно, чтобы искать файл в домашнем каталоге.

Вот старый пост: Получить домашний каталог в Linux

Ranoiaetep 26.11.2022 04:34

А вот обсуждение того, почему у нас нет прямого API для домашнего каталога: groups.google.com/a/isocpp.org/g/std-proposals/c/8zH7v7ow5bQ

Ranoiaetep 26.11.2022 04:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 26.11.2022 04:41

@zalanshah64 Вы можете установить разные флаги: en.cppreference.com/w/cpp/io/ios_base/openmode

Ranoiaetep 26.11.2022 04:43

Другие вопросы по теме