- ベストアンサー
ファイル更新日取得
C言語でファイルの更新日を取得する方法を教えてください。 VBの「FileDateTime」の様なものはございませんでしょうか? よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> C言語でファイルの更新日を取得する方法を教えてください。 標準的な方法は存在しません。 環境を特定するのであれば、(ファイルの更新日という概念があるのなら)普通は何らかの方法が存在するはずです。
その他の回答 (4)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★Win32 API なら『GetFileTime』って関数がありますよ。 ・C言語ではファイルの更新日を取得する標準関数はありません。 ・取得する方法はいくつかありますが、結構めんどうですね。 ・そこで、Win32 API で良ければ『GetFileTime』での取得方法を紹介します。 ●サンプル /* このファイルで使用する関数 */ #define FuncLoadFile(s,a) CreateFile((LPCTSTR)(s),(GENERIC_READ|GENERIC_WRITE),(FILE_SHARE_READ|FILE_SHARE_WRITE),NULL,OPEN_EXISTING,a,NULL) /* 更新日時を取得する関数 */ static BOOL MyFileDateTime( LPSYSTEMTIME lpDate, LPCTSTR lpFileName ) { FILETIME ftDate; FILETIME lcDate; HANDLE hFile; if ( (hFile = FuncLoadFile(lpFileName,FILE_ATTRIBUTE_NORMAL)) != INVALID_HANDLE_VALUE ){ // GetFileTime( hFile, &ftDate, NULL, NULL ); ←作成日時のとき // GetFileTime( hFile, NULL, &ftDate, NULL ); ←最終アクセス日時のとき GetFileTime( hFile, NULL, NULL, &ftDate ); ←更新日時のとき FileTimeToLocalFileTime( &ftDate, &lcDate ); ←世界標準時(UTC)からローカル時間に変換 FileTimeToSystemTime( &lcDate, lpDate ); ←システム時刻形式に変換 CloseHandle( hFile ); return( TRUE ); ←正常に取得できた。 } return( FALSE ); ←エラー(ファイルが見つからないなど) } ●使い方 SYSTEMTIME stDate; if ( MyFileDateTime(&stDate,"abc.txt") ){ printf( "日付は %04d/%02d/%02d\n", stDate.wYear, stDate.wMonth, stDate.wDay ); printf( "曜日は %d\n", stDate.wDayOfWeek ); printf( "時刻は %04d:%02d:%02d\n", stDate.wHour, stDate.wMinute, stDate.wSecond ); } ・詳しい説明はここでは省略しますので下の『参考URL』をどうぞ。
- php504
- ベストアンサー率42% (926/2160)
開いているファイルの情報を得る int _fstat( int fd, struct _stat *buffer ); パスで指定したファイルの情報を得る int _stat( const char *path, struct _stat *buffer );
- yonfa
- ベストアンサー率52% (22/42)
MSWindowsであれば GetFilseTime()かFindFirstFile()あたりを使うんでしょうかねぇ。 BOOL GetFileTime( HANDLE hFile, // ファイルのハンドル LPFILETIME lpCreationTime, // 作成日時 LPFILETIME lpLastAccessTime, // 最終アクセス日時 LPFILETIME lpLastWriteTime // 最終更新日時 ); こっちは情報量多すぎか。。。 HANDLE FindFirstFile( LPCTSTR lpFileName, // ファイル名 LPWIN32_FIND_DATA lpFindFileData // データバッファ ); typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
- tatsu99
- ベストアンサー率52% (391/751)
OSは何でしょうか。又、使用されるC言語のコンパイラはなんでしょうか。それにより、回答も異なりますので、それを提示されると、良い回答が得られるかと思われます。
補足
OSはWindows XP、コンパイラはC++です。
補足
すみません。 使い方がよくわかりませんでした。 教えていただけませんでしょうか?