【问题标题】:from file object to file name从文件对象到文件名
【发布时间】:2010-01-12 03:26:11
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: c++ c file


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        没有便携的方式。然而,特定平台有时有办法做到这一点。

        在 Windows 中,如果您可以获得文件的 HANDLE(就像您从 ::CreateFile() 获得的那个),您可以使用类似 ZwQueryInformationFile() 的东西从中获得路径。

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

        不确定如何从 std::ofstream 执行此操作,但您可以研究一下。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-16
          • 2021-08-13
          • 2013-09-29
          • 2013-09-02
          • 2012-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多