rai002 @ ウィキ
ファイルリストの作成(主にフォルダ)
最終更新:
rai002
-
view
//**********************************************************************
// ファイルリストの作成(主にフォルダ)
// [引数]
// sFindDir : 検索するフォルダ,
// sFindFile : 検索条件
// rank : 階層
// [戻り値]
// ファイルの数
//**********************************************************************
int get_dir::filelist(const char *sFindDir, const char *sFindFile, int rank)
{
int iFiles = 0; // ファイル数カウント
DATA temp_data;
//階層が予定数以上のとき検索しない
if(rank < 0) return iFiles;
// 検索パスの作成
char sFindPath[MAX_NAME_NUMBER];
if (strlen(sFindDir) > MAX_NAME_NUMBER -(strlen(sFindFile)+2) ) // バッファー長のチェック
return 0;
strcpy(sFindPath, sFindDir);
strcat(sFindPath, "\\");
strcat(sFindPath, sFindFile);
// 検索
WIN32_FIND_DATAA FindFileData;
HANDLE hFind = FindFirstFileA( sFindPath , &FindFileData);
if(hFind != INVALID_HANDLE_VALUE){
do{
//cout << "name_;" << FindFileData.cFileName << endl;
string str( (char *)FindFileData.cFileName );
//除外フォルダのときは抜ける
if( UnSearch( str ) ) break;
if( str =="." || str == ".." || str.empty() ) {} // '.'と'..'以外のとき
else if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) {} //システム属性を持つとき
else if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) {} //隠し属性を持つとき
else if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {} //一時属性を持つ
else if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE) {} //スーパーファイル
else if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { //ディレクトリ時
// サブフォルダの処理
char sFindSubDir[ MAX_PATH_NAME ];
strcpy(sFindSubDir, sFindDir);
strcat(sFindSubDir, "\\");
strcat(sFindSubDir, str.c_str());
//cout << sFindSubDir << "\n(Dir) : ";
if( str == "Documents and Settings" ){ //Document and Setting のとき
user_dir = sFindSubDir;
}else{
temp_data.directory = sFindDir;
temp_data.setTime( &FindFileData.ftCreationTime );
if( temp_data.time <= nowTime ) data.push_back( temp_data );
iFiles += filelist(sFindSubDir, sFindFile, rank-1 ); // 再帰呼び出し
}
} else {
// ファイルのとき
//cout << sFindDir << "\t";
//cout << FindFileData.cFileName << endl;
//作成日時を入れている。
//コピー時に更新されるのが作成日時のため
//FileTimeToSystemTime(&FindFileData.ftCreationTime , &set_time);
//temp_data.file_name = str;
//temp_data.directory = sFindDir;
//data.push_back( temp_data );
iFiles++;
}
} while(FindNextFileA(hFind, &FindFileData));
//cout << endl;
FindClose(hFind);
}else{
//cout << "ファイルがありません(" << sFindDir << ")\n";
no_data.push_back( sFindDir );
}
return iFiles;
}