私はファイルの最終更新時刻を取得する必要があるCプログラムで作業しています。プログラムが行うことは、関数がディレクトリ内の各ファイルをループし、特定のファイルが見つかったときに、ファイルの最終変更時刻をチェックする別の関数を呼び出します。私はmylog.txt.1
とmylog.txt.2
は5月4日に変更されたとmylog.txt.3
は、5月3日に変更されたことがわかりますllコマンドを使用して、Linuxでディレクトリの一覧を表示するときlinuxのファイルの最終更新時刻を取得する
ディレクトリ内mylog.txt.1
、mylog.txt.2
とmylog.txt.3
などがあります。
ただし、これらのファイルのそれぞれをチェックすると、常に3rd 3rdが返されます。以下は私が使用しているコードです。
void getFileCreationTime(char *filePath)
{
struct stat attrib;
stat(filePath, &attrib);
char date[10];
strftime(date, 10, "%d-%m-%y", gmtime(&(attrib.st_ctime)));
printf("The file %s was last modified at %s\n", filePath, date);
date[0] = 0;
}
私はst_ctime
、すなわちst_mtime
とst_atime
のすべてのさまざまなバリエーションを試してみたが、それらはすべて5月3日を返します。
ご協力いただきありがとうございます。修正する
を多分クリーンアップ最初:バッファが10の長さである一方で、なぜstrftime' 'に20のサイズを渡しますか?なぜ 'stat'の戻り値をチェックしないのですか? 'stat'が失敗した場合、あなたはガベージ値を解析しています。 – mvds
@mvds申し訳ありませんでした。タイプが – Boardy
です。別のファイルパスを渡していることを確認してください。また、「最終変更時刻」を探している場合は「attrib.st_ctime」が「最後のステータス変更の時刻」を表示します。 attrib.st_mtime " – ray