如何获取文件信息?

时间:2014-11-09 18:40:26

标签: c++ visual-c++ mfc

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

2 个答案:

答案 0 :(得分:5)

查看函数GetFileAttributesEx

#include <windows.h>

WIN32_FILE_ATTRIBUTE_DATA fInfo;

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

WIN32_FILE_ATTRIBUTE_DATA包含很多&#34;常见&#34;文件信息(大小,创建/编辑时间,属性)。

更新:我刚看到您正在使用Visual C ++ 6.由于自Windows XP以来支持GetFileAttributesEx,因此您的WIN API标头中可能无法使用它。你可以通过动态链接来使用这个功能。以下代码与上面的代码段完全相同:

/* 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.
    */
}

答案 1 :(得分:2)

可通过FindFirstFile获取尺寸和创建数据(以及更多)。