从文件对象到文件名

Tim*_*Tim 4 c c++ file

我想知道我们是否可以从我们为C和C++中的文件名创建的文件对象中获取文件名,包括其路径

FILE *fp = fopen(filename, mode); // in C
ofstream out(filename); // in C++
ifstream in(filename);  // in C++
Run Code Online (Sandbox Code Playgroud)

谢谢!

Kyl*_*utz 9

没有可移植的方法来检索FILE*对象的文件名.它甚至可能与实际文件(例如stdout的FILE指针)无关.


Bri*_*ell 9

一般来说,你不能.该文件可能没有文件名,因为它可能是标准输入,输出或错误,或者是套接字.该文件可能也已被删除; 至少在Unix上,您仍然可以读取或写入已删除的文件,因为进程会保留对它的引用,因此在引用计数变为零之前不会删除基础文件本身.文件的名称也可能不止一个; 您可以拥有指向单个文件的多个硬链接.

如果您想保留有关文件来源的信息,我建议您创建自己的结构或类,其中包含文件名和文件指针或流.