![]() |
1
9
一般来说,你不能。该文件可能从来没有文件名,因为它可能是标准输入、输出、错误或套接字。该文件也可能已被删除;至少在UNIX上,您仍然可以对已删除的文件进行读写操作,因为进程保留对该文件的引用,因此在引用计数变为零之前,不会删除基础文件本身。一个文件可能有多个名称;您可以有多个指向单个文件的硬链接。 如果您想保留有关文件来源的信息,我建议您创建自己的结构或类,该结构或类由文件名和文件指针或流组成。 |
![]() |
2
9
没有可移植的方法来检索文件*对象的文件名。它甚至可能与实际文件(例如,stdout的文件指针)没有关联。 |
![]() |
3
1
没有便携方式。然而,特定的平台有时也有办法做到这一点。 在Windows中,如果可以获取文件的句柄(如从::createfile()获得的句柄),则可以使用zwqueryinformationfile()之类的工具从该句柄获取路径。 从文件*中,可以使用_fileno()获取(Unix样式)文件ID。然后调用getooshandle()获取句柄。 不知道如何从std::ofstream中做到这一点,但您可以研究一下。 不确定如何在其他操作系统上执行此操作,但这可能是可能的。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 7 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 7 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 8 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 8 月前 |