我的计算机上有一个现有文件,我想知道是否可以知道它是什么时候制作的、文件的大小以及文件的更多属性。
我试图在 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/