指定されたファイル名のファイルが存在する場合にtrueを返す。
ただし、ディレクトリのパスが与えられた場合、ディレクトリが存在してもfalseを返す。
CFileFind find;
CString filePath = _T("C:\\foo.bar");
if( find.FindFile( filePath ) ){
}
以下の例ではでファイル名の条件を指定。
CFileFind find;
CString dirPath = _T("C:\\foo\\bar");
dirPath += _T("*.txt");
if( find.FindFile( dirPath ) ){
bool flag;
do{
flag = find.FindNextFile();
}while( flag );
}
- PathFileExists
- 指定されたパスにファイル、もしくはディレクトリが存在した場合にtrueを返す。
- PathIsDirectory
- 指定されたパスがディレクトリならtrueを返す。
CString path = _T("C:\\foo.bar");
if( ::PathFileExists( path ) && !::PathIsDirectory( path ) ){
}else if( ::PathFileExists( path ) ){
}
FindFirstFileを利用してもファイル・フォルダの存在確認にできるらしい。が、ルートディレクトリは検出できないっぽい。
上記のような関数を知らなかった為こんなものを作ってしまった。PathIsDirectory関数と(たぶんほぼ)等価なはず。
bool isFolderExist( CString &folderPath ){
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
hFind = ::FindFirstFile( folderPath, &FindFileData );
if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ){
return true;
}
if( folderPath.GetLength() == 2 ){
TCHAR szBuff[125];
::GetLogicalDriveStrings( sizeof(szBuff), szBuff );
for( int i = 0; i < 125; i = i+4 ){
if( szBuff[i] == folderPath.MakeUpper().GetAt(0) &&
':' == folderPath.GetAt(1) ){
return true;
}
}
}
return false;
}