【问题标题】:Get a Windows file information using C++使用 C++ 获取 Windows 文件信息
【发布时间】:2013-12-13 11:56:30
【问题描述】:

有什么方法可以使用 C++ 检查 Windows 文件的某些属性? 想要的格式如上次访问日期、MIME 类型、...

对于其他一些信息提取,我正在使用 Boost Filesystem。

提前致谢

【问题讨论】:

  • 没有可靠的方法来获取它们中的任何一个。 MIME 类型是元信息。它不是文件本身的属性;它由生产者或操作系统(或两者或两者都没有)设置。上次访问日期可以在 Windows 上禁用。同样,你得到的信息是不可靠的。

标签: c++ windows winapi boost


【解决方案1】:

文件修改日期可以直接使用Windows的API(GetFileTime())或boost::filesystem::last_write_time()

至于 MIME 类型,据我所知没有真正的 API。您基本上必须读取注册表项HKEY_CLASSES_ROOT\.<yourextension> 并查找值Content Type。如果有,则包括为扩展设置的 MIME 类型。

【讨论】:

  • 感谢您的回复。是的,我已经知道如何从 boost 中获取最后修改日期。我会试试 MIME 的
【解决方案2】:

C++ 和 boost 的目标是跨平台。语言、标准库和 boost 库试图从您那里抽象出各种环境的特质,因此您的既定目标与编写 标准 C++ 存在本质上的争议。

但是,如果您知道您将专门在 Windows 上编译和运行,您可以将代码封装在其中

#ifdef _WIN32
/* code here */
#endif

并直接致电BOOL WINAPI GetFileAttributesEx(...)

GetFileAttributesEx 是 kernel32.dll 的一部分,它被加载到每个进程中,因此如果您在翻译单元中包含 <windows.h>,您应该能够编译和链接它。

【讨论】:

    【解决方案3】:

    要获得上次访问时间,您始终可以使用stat(),它适用于任何操作系统(也不需要 Boost)。

    至于 MIME 类型,我认为没有简单的方法可以在不分析文件内容的情况下获得它。

    【讨论】:

    • MIME 类型与分析文件内容无关,它要么在某处设置/传递(例如在 HTTP 标头中),要么由文件扩展名确定。您不应该查看文件来确定内容,因为这可能会导致进一步的问题(例如,规避故意限制;例如没有视频文件播放或类似情况)
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2011-02-16
    • 2012-08-20
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多