首页
社区
课程
招聘
[讨论][求助]我想用队列写个遍历文件夹的 有个问题 没看懂
发表于: 2014-11-30 21:49 3445

[讨论][求助]我想用队列写个遍历文件夹的 有个问题 没看懂

2014-11-30 21:49
3445
// 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直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
wcout不是输出wide char字符串么?“aaaaa”,这个我没记错是ascii。所以输出可能会有问题。
wcout<<L"aaaaa"<<endl;
2014-11-30 23:44
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个是我后加的 输入错了,
用wcout 也不行的 ,这个不是问题的所在
2014-12-1 01:14
0
雪    币: 645
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没错啊,很正常
2014-12-1 13:50
0
游客
登录 | 注册 方可回帖
返回
//