私は C プロジェクトに取り組んでおり、ディレクトリ内で最も古いファイルを見つけようとしているので、最も古いファイルが見つかったら削除されます。Windowsを使用してCでこれを行う方法については何も見つかりません。Linuxで行う方法を見つけましたが、Windows用のバージョンが必要です。
5 に答える
基本的には、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;
FindFirstFile
Windowsで/のFindNextFile
組み合わせを使用して、ディレクトリ内のファイルを取得することをお勧めします。stat
その後、Linuxの場合と同じように使用GetFileAttributesEx
するか、日付を確認できます。
stat()
Windows は POSIX に準拠しているため、ディレクトリを読み取り、ファイルに対して実行できるはずです。
時間に関連する 3 つのメンバーを持つWIN32_FILE_ATTRIBUTE_DATAGetFileAttributesEx()
を設定する関数を使用できます。 struct
ftCreationTime
ftLastAccessTime
ftLastWriteTime
これらのうち関連性の高い方を比較して、反復中に見つかった最も古いファイルを追跡できます。反復が終了したら、 を使用して削除しDeleteFile()
ます。時間メンバーは型FILETIME
であり、 を使用して比較できますCompareFileTime()
。
または、 BeyondSoraGetFileTime()
のコメントにあるように、 を使用して関連する時間属性を取得します。
ウィンドウでファイルの詳細を見つけるには、ファイルに関するすべての詳細を含むファイル アロケーション テーブルを参照する必要があります。FATを読み込むコーディング部分はこちら