c++ - 如何获取文件信息?

标签 c++ visual-c++ mfc

我的计算机上有一个现有文件,我想知道是否可以知道它是什么时候制作的、文件的大小以及文件的更多属性。
我试图在 ifstream 中使用但是我有存档的信息
(我使用的是 Visual C++ 6.0,不能使用 Boost)

最佳答案

看函数GetFileAttributesEx .

#include <windows.h>

WIN32_FILE_ATTRIBUTE_DATA fInfo;

GetFileAttributesEx("test.dat", GetFileExInfoStandard, &fInfo);

WIN32_FILE_ATTRIBUTE_DATA包含许多“通用”文件信息(大小、创建/编辑时间、属性)。

更新:我刚刚看到,您使用的是 Visual C++ 6。由于 GetFileAttributesEx 自 Windows XP 起受支持,它可能在您的 WIN API header 中不可用。 .. 您可以通过动态链接使用该功能。以下代码与上面的代码片段执行相同的操作:

/* clone definition of WIN32_FILE_ATTRIBUTE_DATA from WINAPI header */
typedef struct file_info_struct
{
    DWORD    dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD    nFileSizeHigh;
    DWORD    nFileSizeLow;
} FILE_INFO;

/* function pointer to GetFileAttributesEx */
typedef BOOL (WINAPI *GET_FILE_ATTRIBUTES_EX)(LPCWSTR lpFileName, int fInfoLevelId, LPVOID lpFileInformation);


HMODULE hLib;
GET_FILE_ATTRIBUTES_EX func;
FILE_INFO fInfo;

hLib = LoadLibrary("Kernel32.dll");
if (hLib != NULL)
{
    func = (GET_FILE_ATTRIBUTES_EX)GetProcAddress(hLib, "GetFileAttributesExW");
    if (func != NULL)
    {
        func("test.dat", 0, &fInfo);
    }

    FreeLibrary(hLib);

    /*
    ** Don't call func after FreeLibrary !!!
    ** It should be ok since kernel32.dll is loaded by your application anyway but if
    ** you get a function pointer from a dll only loaded by LoadLibrary the function
    ** pointer is invalid once the library if freed.
    */
}

关于c++ - 如何获取文件信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831838/

相关文章:

c++ - 标识符字符集 (clang)

c++ - 字符 * 编码

c++ - 全局函数和不明确的参数 NULL 与 char* 在 vs 2013 和 GCC 之间

c++ - CSocket如何停止监听

c++ - 十六进制操作

c++ - boost::spirit::qi::parse 语法没有按预期工作

c++ - GEOS C++ geos::Geometry Buffer(0) 对 convexHull 的错误断言

c++ - Cmake 找不到 Boost 文件夹

file - CFile 和 CStdioFile 在写入和读取时产生不同的结果

c++ - 模板化类和模板化方法的模板特化语法