Есть ли способ получить имя файла, для которого ifile является потоком?
Нет способа.Это невозможно.
std::ifstream
не хранит имя файла и не предоставляет никакой функции get для получения имени файла.Таким образом, вы не можете получить его, учитывая объект типа std::ifstream
.
Если вам действительно нужно знать имя файла внутри функции (и вы не можете изменить сигнатуру функции), тогда вы можете сохранить глобальная таблица поиска (или предпочтительно std::map
) и добавление записи при каждом открытии файла, что-то вроде этого:
std::map<std::ifstream*, const char*> g_stream_file_pairs;
std::ifstream ifile("xyz/abc/filename.txt");
g_stream_file_pairs.insert(std::make_pair(&ifile, ""xyz/abc/filename.txt"));
void someFunc(std::ifstream & ifile)
{
const char* filename = g_stream_file_pairs[&ifile];
//...
}