• ベストアンサー

ファイル更新日取得

C言語でファイルの更新日を取得する方法を教えてください。 VBの「FileDateTime」の様なものはございませんでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> C言語でファイルの更新日を取得する方法を教えてください。 標準的な方法は存在しません。 環境を特定するのであれば、(ファイルの更新日という概念があるのなら)普通は何らかの方法が存在するはずです。

その他の回答 (4)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★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』をどうぞ。

参考URL:
http://wisdom.sakura.ne.jp/system/winapi/win32/win112.html
  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

開いているファイルの情報を得る int _fstat( int fd, struct _stat *buffer ); パスで指定したファイルの情報を得る int _stat( const char *path, struct _stat *buffer );

  • yonfa
  • ベストアンサー率52% (22/42)
回答No.3

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;

kuisinbo_hanako
質問者

補足

すみません。 使い方がよくわかりませんでした。 教えていただけませんでしょうか?

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

OSは何でしょうか。又、使用されるC言語のコンパイラはなんでしょうか。それにより、回答も異なりますので、それを提示されると、良い回答が得られるかと思われます。

kuisinbo_hanako
質問者

補足

OSはWindows XP、コンパイラはC++です。

関連するQ&A