BOOL bResult;
WIN32_FIND_DATA wfd; // ファイル検索ハンドルを取得
FILETIME ft;
SYSTEMTIME st;
HANDLE hFile = FindFirstFile( lpFileName, &wfd );
// 検索結果をチェック
if( hFile == INVALID_HANDLE_VALUE )
{
// ファイルが存在しない
bResult = FALSE;
}
else
{
// ファイルが存在する
bResult = TRUE;
// 他のファイルを続けて検索する
do {
/* 更新時間取得 */
FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &st);
/* 結果の表示 */
printf("ファイル名: %s", fd.cFileName);
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
printf("(ディレクトリ)");
}
printf("\n短いファイル名: %s\n", fd.cAlternateFileName);
printf("ファイルサイズ: %d\n", fd.nFileSizeLow);
printf("更新日: %04d/%02d/%02d %02d:%02d:%02d\n\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
} while(FindNextFile(hFind, &fd)); //次のファイルを検索
}
// 検索ハンドルをクローズ
FindClose(hFile);
以上のコードでは、lpFileNameがディレクトリである場合、そのディレクトリの下にあるすべてのファイルの検索ができます。
そのすべてのサブ・ディレクトリ(とサブ・サブ、サブ・サブ・サブ、等々)について検索したい場合、再帰的な処理が必要になります。
序にですが、ファイルの削除は
//MFC版
TCHAR* pszFileName = _T("C:¥test.dat");
::DeleteFile( pszFileName );
//Windows API版
TCHAR* pszFileName = _T("C:¥test.dat");
::DeleteFile( pszFileName );
<dir.h>だけを使うやり方もあり、その実装例はこちらにあります。
(http://www.dreamincode.net/code/snippet271.htm)
実行されだコマンドのあるディレクトリ(フォルダ)は以下の通りで取得できます。
TCHAR tcBufPath[2048] = {0};
GetCurrentDirectory(4906, tcBufPath);
GetCurrentDirectory(4906, tcBufPath);
実行されだコマンドの名前(フルパス)は以下の通りで取得できます。
GetModuleFileName( NULL, tcBufPath, 4096 );
他には、
SetCurrentDirectory カレントディレクトリを変更する
GetTempPath 一時作業ディレクトリの取得
GetTempFileName 一時ファイル名の取得
GetWindowsDirectory Windowsディレクトリの取得
GetSystemDirectory システムディレクトリの取得
GetLogicalDrives ドライブ一覧の取得
GetLogicalDriveString ドライブ文字列一覧の取得
GetTempPath 一時作業ディレクトリの取得
GetTempFileName 一時ファイル名の取得
GetWindowsDirectory Windowsディレクトリの取得
GetSystemDirectory システムディレクトリの取得
GetLogicalDrives ドライブ一覧の取得
GetLogicalDriveString ドライブ文字列一覧の取得
関連文字列の長さの最大値は以下の通りです。
_MAX_PATH パス名の長さの最大値
_MAX_DRIVE ドライブ名の長さの最大値
_MAX_DIR ディレクトリ名の長さの最大値
_MAX_FNAME ファイル名の長さの最大値
_MAX_EXT 拡張子の長さの最大値
_MAX_DRIVE ドライブ名の長さの最大値
_MAX_DIR ディレクトリ名の長さの最大値
_MAX_FNAME ファイル名の長さの最大値
_MAX_EXT 拡張子の長さの最大値
ディレクトリに変化があるかどうかを監視するには
FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification
FindNextChangeNotification
FindCloseChangeNotification
ファイル名をドライブ名、パス名、ファイル名(拡張・パス無し)と拡張子に分解するには、
_splitpath ( psztest, szDrive, szPath, szTitle, szExt);
_wplitpath ( pwztest, wzDrive, wzPath, wzTitle, wzExt);
_wplitpath ( pwztest, wzDrive, wzPath, wzTitle, wzExt);
No comments:
Post a Comment