我正在处理一个 C 项目,我试图在一个目录中找到最旧的文件,以便一旦找到最旧的文件,它就会被删除。我找不到任何关于如何在 C 中使用 windows 执行此操作的信息,已经找到在 Linux 中执行此操作的方法,但我需要一个适用于 Windows 的版本。
问问题
3881 次
5 回答
3
基本上你扫描目录,就像在 Linux 中一样(但你也可以查看 Boost 库)。
有关时间和日期的数据已经在目录扫描结构中可用
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;
于 2012-10-16T13:50:57.900 回答
1
由于 windows 是 POSIX 兼容的,您应该能够读取目录并对stat()
文件执行操作。
于 2012-10-16T13:44:09.963 回答
1
您需要在 Windows 上使用FindFirstFile
/FindNextFile
组合来获取目录中的文件。然后,您可以stat
像在 Linux 中一样使用,也GetFileAttributesEx
可以检查日期。
于 2012-10-16T13:45:52.940 回答
0
您可以使用GetFileAttributesEx()
填充具有三个时间相关成员的WIN32_FILE_ATTRIBUTE_DATA的函数: struct
ftCreationTime
ftLastAccessTime
ftLastWriteTime
您可以比较其中哪个更相关,并跟踪迭代期间找到的最旧文件。迭代结束后,使用DeleteFile()
. 时间成员具有类型FILETIME
,可以使用 进行比较CompareFileTime()
。
或者使用GetFileTime()
来获取相关的时间属性,正如BeyondSora所评论的那样。
于 2012-10-16T13:44:22.693 回答
-3
要在 Windows 中查找文件的详细信息,您必须参考文件分配表,其中包含有关文件的所有详细信息。在这里检查编码部分以读取 FAT
于 2012-10-16T14:02:41.053 回答