2

私は C プロジェクトに取り組んでおり、ディレクトリ内で最も古いファイルを見つけようとしているので、最も古いファイルが見つかったら削除されます。Windowsを使用してCでこれを行う方法については何も見つかりません。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

FindFirstFileWindowsで/のFindNextFile組み合わせを使用して、ディレクトリ内のファイルを取得することをお勧めします。statその後、Linuxの場合と同じように使用GetFileAttributesExするか、日付を確認できます。

于 2012-10-16T13:45:52.940 に答える
1

stat()Windows は POSIX に準拠しているため、ディレクトリを読み取り、ファイルに対して実行できるはずです。

于 2012-10-16T13:44:09.963 に答える
0

時間に関連する 3 つのメンバーを持つWIN32_FILE_ATTRIBUTE_DATAGetFileAttributesEx()を設定する関数を使用できます。 struct

  • ftCreationTime
  • ftLastAccessTime
  • ftLastWriteTime

これらのうち関連性の高い方を比較して、反復中に見つかった最も古いファイルを追跡できます。反復が終了したら、 を使用して削除しDeleteFile()ます。時間メンバーは型FILETIMEであり、 を使用して比較できますCompareFileTime()


または、 BeyondSoraGetFileTime()のコメントにあるように、 を使用して関連する時間属性を取得します。

于 2012-10-16T13:44:22.693 に答える
-3

ウィンドウでファイルの詳細を見つけるには、ファイルに関するすべての詳細を含むファイル アロケーション テーブルを参照する必要があります。FATを読み込むコーディング部分はこちら

于 2012-10-16T14:02:41.053 に答える