Подтвердить что ты не робот

Как получить путь к файлу из std:: ifstream в С++

Я открываю файл, используя std::ifstream.

Я могу открыть файл, используя относительный путь (file.txt) или абсолютный путь (C:\test\file.txt).

Поскольку я передаю строку в качестве имени файла, я не знаю, является ли это относительным или абсолютным путем.

Может кто-нибудь сказать мне, как получить абсолютный путь после успешного открытия файла, используя std::ifstream?

например:.

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt"

Я хочу получить абсолютный путь после успешного открытия файла.

Спасибо,

4b9b3361

Ответ 1

Вы не можете, std::ifstream не сохраняет эту информацию.

Однако вы можете:

  • использовать текущий рабочий каталог процесса, чтобы составить абсолютный путь самостоятельно, или
  • используйте библиотеку, такую ​​как библиотека Boost.Filesystem для преобразования между относительными и абсолютными путями.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    

Ответ 2

У классов fstream нет функциональности для доступа или обработки имени, используемого для открытия файла, а в стандартной библиотеке С++ нет функций обработки имен файлов - вам придется писать код самостоятельно или использовать стороннюю библиотеку или операционные системы.

Ответ 3

Я не думаю, что это возможно для std:: fstream. Я сделал это для FILE * в Windows (не переносимым образом). См. от файла к имени файла.

Рассматривали ли вы расширение ifstream своим собственным классом, который запоминает имя файла?