请批改补充以下代码完成能搜索打印出盘内所有txt文件的程序

请修改补充以下代码完成能搜索打印出盘内所有txt文件的程序
因为本人需要把盘内某种类型的文件都找出来  比如txt  jpg  avi  。
1  试过在扫描目录时候复制一份路径吧//改成\\然后搜索txt文件 但是有错误 。。从刚得到这个代码然后百度理解  加代码  调试折腾了几天还是没完成  。。 
2  这个程序运行后能扫描所有文件  但是打印出来文件的很少  当我换个只包含7个文件的文件夹扫描时都能打印出来 然后再大一点的子目录有打印不出所有文件了  然后试想过是不是&FindFileData内存太小不够放的   。具体怎么回事请大神帮我解答下  
3  希望能够以下面的代码为模板修改补充完成  因为这个我折腾了很久想了很多很想学习到底如何让用这个完成 。谢谢了
  

#include<windows.h>  
#include<iostream>  
#include<string>  
using namespace std;



//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符  
void _find(string path){
//取路径名最后一个"//"之前的部分,包括"//"  
string prefix = path.substr(0, path.find_last_of('//') + 1);

WIN32_FIND_DATA FindFileData;
HANDLE hFind = ::FindFirstFile(path.c_str(), &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
cout << "文件通配符错误" << endl;
return;
}
while (TRUE)
{
//目录  
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//不是当前目录,也不是父目录  
if (FindFileData.cFileName[0] != '.')
{
//查找下一级目录  
_find(prefix + FindFileData.cFileName + "//" + "*.*");
}
}
//文件  
else
{
cout << FindFileData.cFileName << endl;
}
if (!FindNextFile(hFind, &FindFileData))
break;
}
FindClose(hFind);
}

void main(){
_find("E:");//目录:E盘  
_find("E://*.*");//E盘下所有文件  

string str = "./test"; //这里指定的是目录  

string path;  
cout<<"请输入文件通配符:"<<flush;  
cin>>path;  
str=str+path;  
_find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*"   
_find(str);//可以处理"*","..//*" 不可以处理".",".."  
system("pause");
}
------解决思路----------------------

#include<windows.h>  
#include<iostream>  
#include<string>  
using namespace std;

//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符  
void _find(string path)
{
//保存目录名
string prefix = path.substr(0, path.find_last_of('\\') + 1);
//输出要查找的目录的名字
cout << "[目录]  " << prefix  << endl;

WIN32_FIND_DATA FindFileData;
HANDLE hFind = ::FindFirstFile(path.c_str(), &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
cout << "文件通配符错误" << endl;
return;
}
while (TRUE)
{
//目录  
if ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
//不是当前目录,也不是父目录(.是当前目录 ..是上级目录)
if (FindFileData.cFileName[0] != '.')
{
//查找下一级目录  
_find(prefix + FindFileData.cFileName + "\\" + "*.*");
}
}
else
{
cout << "+文件+\t" << FindFileData.cFileName << endl;
}
if(!FindNextFile(hFind, &FindFileData))
break;
}
FindClose(hFind);
}

int main()
{
_find("E:\\*.*"); //E盘下所有文件  
string path;  
cout<<"请输入路径和文件通配符:例如:(E:\\*.* 或者 abc\\*.* )"<<flush;  
cin>>path;  
_find(path);
system("pause");
return 0;
}


------解决思路----------------------
赵老师来个dos命令,一切搞定,哪要这么复杂请批改补充以下代码完成能搜索打印出盘内所有txt文件的程序@赵4老师 
------解决思路----------------------
引用:
赵老师来个dos命令,一切搞定,哪要这么复杂请批改补充以下代码完成能搜索打印出盘内所有txt文件的程序@赵4老师 

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命令不会。