fopen() с относительным путем

#c #visual-c #file-io

#c #visual-c #file-io

Вопрос:

У меня возникли проблемы с использованием fopen() с относительным путем. Я хотел использовать fopen следующим образом:

 fopen("\Saurabh\pqrs.txt");
  

я получаю указатель filePointer как null.

Ситуация возникла из-за того, что я пытаюсь создать проект установки или развертывания, который должен читать файлы. Пути к файлам, выбранные по умолчанию после выполнения пользователем setup, следующие C:Program ФайлыНастройка.. (где exe сбрасывается). Итак, я сбросил файлы в ту же папку и указал путь (фиксированный путь или жестко заданный) к этим файлам в программе.

Если пользователь выбирает какой-либо другой путь для установки, программа завершается с ошибкой.

Могу ли я как-нибудь это исправить?

Ответ №1:

Две проблемы:

  1. Вам нужно экранировать символ обратной косой черты. Запись \ .
  2. Вам нужно использовать относительный путь. Начиная путь с \ вы имеете в виду начать с корневого каталога.

Собрав их вместе, я думаю, вам следует написать:

 fopen("Saurabh\pqrs.txt");
  

Ответ №2:

Убедитесь, что вы удваиваете символы. Строка, которую вы передаете, должна быть "Saurabh\pqrs.txt" . Обратите внимание, что начало пути с \ означает, что он не является относительным. (Ну, на самом деле это относительно вашего текущего диска, но я сомневаюсь, что это то, что вы ищете.)

Комментарии:

1. Я думаю, для дополнительной ясности, возможно, стоит ввести a . в путь к каталогу, чтобы на 100% было ясно, что вы начинаете с текущего каталога. (В данном случае это было бы fopen(".\Saurabh\pqrs.txt") ) В некоторых системах начало с косой чертой имеет последствия.

2. "C:\Saurabh\pqrs.txt" это абсолютный путь; OP говорит, что он хочет использовать относительный путь.