-
-
[讨论][求助]我想用队列写个遍历文件夹的 有个问题 没看懂
-
发表于:
2014-11-30 21:49
3444
-
[讨论][求助]我想用队列写个遍历文件夹的 有个问题 没看懂
// listwenjianjia.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"windows.h"
#include<iostream>
using namespace std;
typedef struct node{
TCHAR path[256];
struct node *next;
}NODE;
typedef struct qu{
NODE * head;
NODE * tail;
}QUEUE;
QUEUE q = {NULL,NULL};
//添加队列
void addQ(TCHAR *str){
if(str == NULL){
return ;
}
NODE *t = new NODE;
lstrcpy(t->path,str);
t->next = NULL;
if(q.head == NULL){
q.head = t;
}
if(q.tail == NULL){
q.tail = t;
}else{
q.tail->next = t;
q.tail = t;
}
}
//把当前文件夹子文件添加到队列
void findnext(TCHAR *p){
//当前搜索目录
TCHAR curr[260];
//文件过滤
TCHAR *filter = L"\\*.*";
//下一个目录
TCHAR nextpath[260];
//组装path
lstrcpy(curr,p);
lstrcat(curr,filter);
WIN32_FIND_DATA wd;
//查找第一个文件
HANDLE hf = FindFirstFile(curr,&wd);
if(hf == INVALID_HANDLE_VALUE){
return ;
}
do{
//判断搜索到的是否为目录
if(wd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(lstrcmp(wd.cFileName,L".") == 0 || lstrcmp(wd.cFileName,L"..")== 0){
continue;
}
lstrcpy(nextpath,p);
lstrcat(nextpath,L"\\");
lstrcat(nextpath,wd.cFileName);
wcout<<nextpath<<endl;
addQ(nextpath); //添加一个文件到队列
}else{
//wcout<<wd.cFileName<<endl;
}
}while(FindNextFile(hf,&wd));
}
void findall(TCHAR *dir);
int _tmain(int argc, _TCHAR* argv[])
{
findall(L"e:");
return 0;
}
void findall(TCHAR *dir){
//初始化队列
findnext(dir);
NODE * temp = NULL;
//循环队列
while(1){
if(q.head!=NULL){
temp = q.head;
findnext(temp->path);
q.head = q.head->next;
delete temp;
}else{
break;
}
}
wcout<<"aaaaaaaaaaa"<<endl;
}
这个程序 只能遍历出一部分,我自己看了很长时间,感觉没什么问题,还有一个问题就是 最下面这一串 aaaaa 无法打印出来, 也没有报错;
求助
如果我用这个程序来搜索文件 搜索到文件才打印的话,,只要文件存在 就可以搜得到
这样看程序是没问题的 ,那为什么 全盘打印就不行
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课