Можно ли читать и писать в заголовочный файл?

Итак, я пытаюсь перезаписать макрос, который у меня есть в файле заголовка, но я не могу открыть его с помощью std::ifstream. Возможно ли вообще читать/записывать в существующий заголовочный файл или существуют разрешения по умолчанию, которые не позволяют программам изменять содержимое заголовочного файла?

std::ifstream versionH;
char temp[100];
versionH.open("..\temp.h");
if (!versionH.is_open()) {
    std::cout << "Didn't open" << std::endl;
    return 1;
}
while (!versionH.eof()) {
    versionH >> temp;
    std::cout << temp << std::endl;
}

Я надеюсь, что смогу прочитать файл заголовка и отобразить его содержимое, но 'versionH.is_open()' возвращает false. Есть ли что-то, что мне здесь не хватает?

Эту обратную галочку следует экранировать как двойную обратную галочку: ..\\temp.h. И обратите внимание, единственный способ, который «работает» (термин используется очень свободно), - это если текущий рабочий каталог во время выполнения находится на один уровень глубже, чем расположение temp.h на диске. Почему-то мне кажется, что наименьшая из ваших проблем впереди, но это, наверное, проблема с кодом это.

WhozCraig 28.05.2019 18:04

Не должно быть проблем с этим. Самомодифицирующийся код НО не является хорошей идеей. ТАКЖЕ, что цикл while неверен. Посмотрите: Почему iostream::eof внутри условия цикла (т.е. while (!stream.eof())) считается неправильным?

Martin York 28.05.2019 18:06

WhozCraig предложил исправить, убрав обратную косую черту. ИЛИ вы можете использовать косую черту, которая в настоящее время поддерживается во всех системах: "../темп.ч" Также versionH >> temp; читает слово, разделенное пробелом (не строку). Попробуйте std::getline() и предпочитайте std::string temp;char temp[100];.

Martin York 28.05.2019 18:08

Заголовочный файл — это такой же файл, как и любой другой. Конечно, вы можете написать ему. Вопрос в том, должен ли вы. Вероятно, есть лучший способ добиться того, что вы пытаетесь сделать.

Jesper Juhl 28.05.2019 18:13

@WhozCraig Вау, это сработало, какое простое решение. Спасибо!

Neema Nejad 28.05.2019 18:21

@MartinYork Спасибо, чувак, я изменил проверку while по твоему предложению.

Neema Nejad 28.05.2019 18:31
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Is it possible to read and write to a header file?

Заголовки — это файлы. Можно читать и записывать файлы (при условии, что файл существует, а процесс имеет достаточные разрешения и т. д.). Следовательно, мы можем сделать вывод, что файлы заголовков можно читать и записывать.

Обратите внимание, что изменение файла заголовка, который использовался для компиляции программы, не влияет на скомпилированную программу. Это может повлиять только на программы, скомпилированные с использованием модифицированного файла.

Кроме того, файлы в контексте компиляции программы не имеют отношения к программе. Только файлы в файловой системе, в которой выполняется программа, могут быть прочитаны.

Is there something I'm missing here?

Вероятно, файл не существует. Имя файла самое подозрительное. Действительно ли он содержит символ табуляции (\t) или вы намеревались написать (Windows) разделитель каталогов? Обратная косая черта — это escape-символ, поэтому, чтобы записать ее в строковом литерале, вы должны экранировать ее (с другой обратной косой чертой: \\).

Или вы можете просто использовать /, который отлично работает как в Unix, так и в Windows.

Jesper Juhl 28.05.2019 18:54

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