在Windows上的C中查找目录中最旧的文件

时间:2012-10-16 13:40:25

标签: c windows file io directory

我正在处理一个C项目,我正在尝试查找目录中最旧的文件,以便在找到最旧的文件后,将其删除。我在C语言中找不到任何关于如何使用Windows的方法,已经找到了在Linux中实现的方法,但我需要一个适用于Windows的版本。

5 个答案:

答案 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