从文件对象到文件名

时间:2010-01-12 03:26:11

标签: c++ c file

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

FILE *fp = fopen(filename, mode); // in C
ofstream out(filename); // in C++
ifstream in(filename);  // in C++

谢谢!

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

没有可移植的方式。然而,特定平台有时会有办法做到这一点。

在Windows中,如果您可以获取文件的HANDLE(就像您从:: CreateFile()获得的那样),您可以使用类似ZwQueryInformationFile()的方式获取该文件的路径。

从FILE *,您可以使用_fileno()获取(Unix风格)文件ID。然后调用_get_oshandle()来获取HANDLE。

不确定如何从std :: ofstream中做到这一点,但你可以研究它。

不确定如何在其他操作系统上执行此操作,但有可能。