生成N个不同的随机数(C++,范围0~N-1)(二)

2015-01-24 09:22:13 · 作者: · 浏览: 9
const char *filespec) { ProcessDir(m_szInitDir,NULL); return BrowseDir(m_szInitDir,filespec); } bool CBrowseDir::BrowseDir(const char *dir,const char *filespec) { _chdir(dir); //首先查找dir中符合要求的文件 long hFile; _finddata_t fileinfo; if ((hFile=_findfirst(filespec,&fileinfo)) != -1) { do { //检查是不是目录 //如果不是,则进行处理 if (!(fileinfo.attrib & _A_SUBDIR)) { char filename[_MAX_PATH]; strcpy(filename,dir); strcat(filename,fileinfo.name); //cout << filename << endl; if (!ProcessFile(filename)) return false; } } while (_findnext(hFile,&fileinfo) == 0); _findclose(hFile); } //查找dir中的子目录 //因为在处理dir中的文件时,派生类的ProcessFile有可能改变了 //当前目录,因此还要重新设置当前目录为dir。 //执行过_findfirst后,可能 系统记录下了相关信息,因此改变目录 //对_findnext没有影响。 _chdir(dir); if ((hFile=_findfirst(*.*,&fileinfo)) != -1) { do { //检查是不是目录 //如果是,再检查是不是 . 或 .. //如果不是,进行迭代 if ((fileinfo.attrib & _A_SUBDIR)) { if (strcmp(fileinfo.name,.) != 0 && strcmp (fileinfo.name,..) != 0) { char subdir[_MAX_PATH]; strcpy(subdir,dir); strcat(subdir,fileinfo.name); strcat(subdir,\); ProcessDir(subdir,dir); if (!BrowseDir(subdir,filespec)) return false; } } } while (_findnext(hFile,&fileinfo) == 0); _findclose(hFile); } return true; } bool CBrowseDir::ProcessFile(const char *filename) { return true; } void CBrowseDir::ProcessDir(const char *currentdir,const char *parentdir) { } //从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数 class CStatDir:public CBrowseDir { protected: int m_nFileCount; //保存文件个数 int m_nSubdirCount; //保存子目录个数 public: vector
vec_files; public: //缺省构造器 CStatDir() { //初始化数据成员m_nFileCount和m_nSubdirCount m_nFileCount=m_nSubdirCount=0; } //返回文件个数 int GetFileCount() { return m_nFileCount; } //返回子目录个数 int GetSubdirCount() { //因为进入初始目录时,也会调用函数ProcessDir, //所以减1后才是真正的子目录个数。 return m_nSubdirCount-1; } void VisitedFiles(ostream&out) { for (vector ::iterator iter=vec_files.begin();iter!=vec_files.end();iter++) { out<<*iter<< ; } } virtual bool BeginBrowse(const char *filespec) { string file_exts=filespec; vector vec_exts; size_t pos_start=0; size_t npos=file_exts.find(|); string exts; while(npos!=string::npos) { exts=file_exts.substr(pos_start,npos-pos_start); vec_exts.push_back(exts); pos_start=npos+1; npos=file_exts.find(|,pos_start); } exts=file_exts.substr(pos_start); vec_exts.push_back(exts); bool sign=true; for (vector ::iterator iter=vec_exts.begin();iter!=vec_exts.end();iter++) { exts=*iter; if (!CBrowseDir::BeginBrowse(exts.c_str())) { sign=false; } } return sign; } protected: //覆写虚函数ProcessFile,每调用一次,文件个数加1 virtual bool ProcessFile(const char *filename) { m_nFileCount++; //cout<

?