我正在处理一个C项目,我正在尝试查找目录中最旧的文件,以便在找到最旧的文件后,将其删除。我在C语言中找不到任何关于如何使用Windows的方法,已经找到了在Linux中实现的方法,但我需要一个适用于Windows的版本。
答案 0 :(得分:3)
基本上你扫描目录,就像在Linux中一样(但你也可以查看Boost库)。
有关时间和日期的数据已在directory scan structure
中提供HANDLE fh;
FILETIME oldest = {-1U, -1U};
// Buffer to hold file name
oldestFile = malloc(MAX_PATH);
fd = malloc(sizeof(WIN32_FIND_DATA));
if (INVALID_HANDLE_VALUE == (fh = FindFirstFile(directory_name, fd)))
// Signal error, free memory, (and return an error code?)
// OK to proceed
do
{
if(fd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
continue;
//
if ((fd->ftCreationTime.dwHighDateTime < oldest.dwHighDateTime)
|| (fd->ftCreationTime.dwHighDateTime == oldest.dwHighDateTime
&& fd->ftCreationTime.dwLowDateTime < oldest.dwLowDateTime))
{
oldest.dwHighDateTime = fd->ftCreationTime.dwHighDateTime; // ftLastAccessTime? ftLastWriteTime?
oldest.dwLowDateTime = fd ->ft CreationTime.dwLowDateTime;
strncpy(oldestFile, MAX_PATH, fd->cFileName);
}
} while(FindNextFile(fh, fd));
FindClose(fh);
free(fd); fd = NULL;
答案 1 :(得分:1)
由于windows符合POSIX标准,因此您应该能够读取目录并对文件执行stat()
。
答案 2 :(得分:1)
您需要在Windows上使用FindFirstFile
/ FindNextFile
组合来获取目录中的文件。然后,您可以像在Linux中一样使用stat
,或者GetFileAttributesEx
来检查日期。
答案 3 :(得分:0)
您可以使用GetFileAttributesEx()
函数填充WIN32_FILE_ATTRIBUTE_DATA struct
,其中包含三个与时间相关的成员:
ftCreationTime
ftLastAccessTime
ftLastWriteTime
您可以比较哪些更相关,并跟踪迭代过程中找到的最旧文件。迭代结束后,使用DeleteFile()
删除它。成员的时间类型为FILETIME
,可以使用CompareFileTime()
进行比较。
或使用GetFileTime()
获取相关时间属性,如BeyondSora所述。
答案 4 :(得分:-3)
要在Windows中查找文件的详细信息,您必须参考文件分配表,其中包含有关文件的所有详细信息。 检查here以查找编码部分以读取FAT