dポイントプレゼントキャンペーン実施中!

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

A 回答 (5件)

> C言語でファイルの更新日を取得する方法を教えてください。



標準的な方法は存在しません。
環境を特定するのであれば、(ファイルの更新日という概念があるのなら)普通は何らかの方法が存在するはずです。
    • good
    • 0

★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/w …
    • good
    • 2

開いているファイルの情報を得る


int _fstat( int fd, struct _stat *buffer );

パスで指定したファイルの情報を得る
int _stat( const char *path, struct _stat *buffer );
    • good
    • 0

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;

この回答への補足

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

補足日時:2006/12/19 09:29
    • good
    • 0

OSは何でしょうか。

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

この回答への補足

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

補足日時:2006/12/19 08:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!