2010-01-12 78 views
4

我不知道如果我们能得到的文件名包括它从文件对象,我们在C和C语言为文件名创建++分别从文件对象为文件名

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

感谢路径!

回答

9

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

如果你想保留有关文件来自哪里的信息,我会建议创建你自己的结构或类,它由文件名和文件指针或流组成。

9

没有可移植的方式来检索FILE *对象的文件名。它可能甚至不与一个实际的文件相关联(例如一个用于标准输出的文件指针)。

1

没有便携的方式。然而特定的平台有时可以做到这一点。在Windows中,如果你可以得到文件的HANDLE(就像你从:: CreateFile()得到的那个),你可以使用类似ZwQueryInformationFile()的方法获得路径。

从文件*中,您可以使用_fileno()获得(Unix样式)文件ID。然后调用_get_oshandle()来获取HANDLE。

不知道如何从std :: ofstream做到这一点,但你可以研究。

不知道如何在其他操作系统上做到这一点,但它可能是可能的。