【问题标题】:how to get the name of a file in C++ using Win32 Handle? [duplicate]如何使用 Win32 句柄在 C++ 中获取文件名? [复制]
【发布时间】:2012-04-16 06:20:08
【问题描述】:

我正在尝试使用 C++ 中的 Win32 句柄获取文件的名称。

我还有两个问题,文件可能是空的(打开文件可能不起作用),我不能使用 Windows Vista 及更高版本支持的所有花哨的功能(例如 GetFinalPathNameByHandle)。

感谢您的帮助!

【问题讨论】:

  • “处理程序”是什么意思? POSIX 文件描述符? C标准输出文件? C ++ iostreams fstream? Win32 API什么的? Qt 还有什么?
  • 我认为他的意思是从CreateFile 收到的 Win32 HANDLE
  • 他应该这么说!并用winapi 标记问​​题。这不是 C++ 问题,而是 Windows 编程问题。
  • 我编辑了这个问题以澄清它。不幸的是,我仍然无法就您提供给我们的大量信息提供答案。您能否还澄清一下“使用所有花哨的功能”是什么意思?你的意思是你不能使用STL?
  • 嘿,花哨的方式意味着我不能使用 GetFinalPathNameByHandle 例如,处理程序意味着 win32 处理程序,(C++ HANDLE 类型)。据我了解,使用文件映射不起作用,因为文件可能没有内容。

标签: c++ file winapi


【解决方案1】:

对于 XP+,您可以映射文件,然后调用 GetMappedFileName,它将返回名称(尽管不是目录)。见Obtaining a File Name From a File Handle

【讨论】:

    【解决方案2】:

    我不知道 win32,但我知道 sysinternals 进程资源管理器。 Google 提出了一个开源替代方案:http://processhacker.sourceforge.net/

    也许研究该代码将使您能够做到这一点。

    【讨论】:

      【解决方案3】:

      GetMappedFilename() 虽然在 MSDN 中推荐,但并不是最好的解决方案。

      我已经发布了完全符合您要求的代码,可以在此处复制和粘贴: How to get name associated with open HANDLE

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 2010-09-23
        • 2011-03-19
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 2010-10-26
        相关资源
        最近更新 更多