我在计算机上有一个现有文件,我想知道是否可以知道它的制作时间,文件大小以及文件中的更多属性。
我尝试在ifstream中使用但是有我存档的信息
(我使用的是Visual C ++ 6.0,不能使用Boost)
答案 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
获取尺寸和创建数据(以及更多)。