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;
}
 
 
 
ウィキ募集バナー