user-0 提问: 遍历文件的算法，有没有大神可以优化一下的

回复:
user: user-1
content: 推荐楼主阅读《Unix编程艺术》

user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。  如果嫌system弹出cmd窗口难看的话，改用WinExec("...",SW_HIDE);

user: user-2
content: 引用 5 楼 xy505188 的回复:[quote=引用 2 楼 anonymalias 的回复:]  void  filesearch(char newpath[_MAX_PATH],   vector<ff> &v) { } 多谢大神指点[/quote] 这个问题不能说是大神，，，大神是不可以乱叫的

user: user-0
content: 引用 2 楼 anonymalias 的回复: void  filesearch(char newpath[_MAX_PATH],   vector<ff> &v) { } 多谢大神指点

user: user-0
content: 引用 3 楼 user-3 的回复:  #include <vector> #include <algorithm> #include <stdio.h> #include <io.h> #include <iostream> #include <stdlib.h> using namespace std;  typedef struct { 	char p[_MAX_PATH];  ///完整路径 	char n[_MAX_FNAME];  ///文件名 }ff;   void filesearch(char newpath[_MAX_PATH]/*in*/, vector<ff>& fvec ) { 	struct _finddata_t fd; 	int handle, done = 0; 	char path[_MAX_PATH]; 	strcpy_s(path,_MAX_PATH, newpath); 	strcat_s(path,_MAX_PATH, "\\*.*"); 	if (!(handle = _findfirst(path, &fd))) 	{ 		fvec.clear(); 		return; 	}  	while (!(done = _findnext(handle, &fd))) 	{ 		if (strcmp(fd.name, ".") == 0 || strcmp(fd.name, "..") == 0) 		{ 			continue; 		} 		if (fd.attrib == _A_SUBDIR) 		{ 			char t[_MAX_PATH]; 			strcpy_s(t,_MAX_PATH, newpath); 			strcat_s(t, _MAX_PATH,  "\\"); 			strcat_s(t, _MAX_PATH, fd.name); 			filesearch(t, fvec); 			continue; 		} 		else 		{ 			ff f; 			char t[_MAX_PATH]; 			strcpy_s(t, newpath); 			strcat_s(t, "\\"); 			strcat_s(t, fd.name); 			strcpy_s(f.p, t); 			strcpy_s(f.n, fd.name); 			fvec.push_back(f); 		} 	} 	_findclose(handle); }    int main() { 	vector<ff> fvec; 	FILE *in;  	fopen_s(&in, "1.txt", "w"); 	filesearch("f:\\my_proj", fvec); 	for (vector<ff>::size_type i = 0; i < fvec.size(); i++) 	{ 		fprintf(in, "%s\n", fvec[i].p); 	} 	fclose(in); 	system("start 1.txt");  } 谢谢大神点拨，同时更深入理解了vector的原理

user: user-3
content: #include <vector> #include <algorithm> #include <stdio.h> #include <io.h> #include <iostream> #include <stdlib.h> using namespace std;  typedef struct { 	char p[_MAX_PATH];  ///完整路径 	char n[_MAX_FNAME];  ///文件名 }ff;   void filesearch(char newpath[_MAX_PATH]/*in*/, vector<ff>& fvec ) { 	struct _finddata_t fd; 	int handle, done = 0; 	char path[_MAX_PATH]; 	strcpy_s(path,_MAX_PATH, newpath); 	strcat_s(path,_MAX_PATH, "\\*.*"); 	if (!(handle = _findfirst(path, &fd))) 	{ 		fvec.clear(); 		return; 	}  	while (!(done = _findnext(handle, &fd))) 	{ 		if (strcmp(fd.name, ".") == 0 || strcmp(fd.name, "..") == 0) 		{ 			continue; 		} 		if (fd.attrib == _A_SUBDIR) 		{ 			char t[_MAX_PATH]; 			strcpy_s(t,_MAX_PATH, newpath); 			strcat_s(t, _MAX_PATH,  "\\"); 			strcat_s(t, _MAX_PATH, fd.name); 			filesearch(t, fvec); 			continue; 		} 		else 		{ 			ff f; 			char t[_MAX_PATH]; 			strcpy_s(t, newpath); 			strcat_s(t, "\\"); 			strcat_s(t, fd.name); 			strcpy_s(f.p, t); 			strcpy_s(f.n, fd.name); 			fvec.push_back(f); 		} 	} 	_findclose(handle); }    int main() { 	vector<ff> fvec; 	FILE *in;  	fopen_s(&in, "1.txt", "w"); 	filesearch("f:\\my_proj", fvec); 	for (vector<ff>::size_type i = 0; i < fvec.size(); i++) 	{ 		fprintf(in, "%s\n", fvec[i].p); 	} 	fclose(in); 	system("start 1.txt");  }

user: user-2
content: void  filesearch(char newpath[_MAX_PATH],   vector<ff> &v) { }

user: user-3
content: look一下