2

我正在处理一个 C 项目,我试图在一个目录中找到最旧的文件,以便一旦找到最旧的文件,它就会被删除。我找不到任何关于如何在 C 中使用 windows 执行此操作的信息,已经找到在 Linux 中执行此操作的方法,但我需要一个适用于 Windows 的版本。

4

5 回答 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 回答