Как получить путь к файлу из std :: ifstream в c ++ - PullRequest
23 голосов
/ 11 июня 2010

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

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

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

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

например:.

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

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

Спасибо

Ответы [ 3 ]

19 голосов
/ 11 июня 2010

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

Что вы можете сделать, однако:

  1. use process 'текущий рабочий каталог, чтобы самостоятельно составить абсолютный путь, или
  2. использовать библиотеку, подобную Boost.Filesystem , для преобразования между относительными и абсолютными путями.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
3 голосов
/ 11 июня 2010

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

2 голосов
/ 11 июня 2010

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

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

...