Как получить путь к файлу из 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"
Я хочу получить абсолютный путь после успешного открытия файла.
Спасибо,
Ответы
Ответ 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 своим собственным классом, который запоминает имя файла?