现在的位置: 首页 > 综合 > 正文

非递归遍历文件夹

2013年06月27日 ⁄ 综合 ⁄ 共 1525字 ⁄ 字号 评论关闭

#include <
windows.h
>


#include

<
iostream
>

#include

<
stack
>

#include

<
string
>


using

namespace
std;


void
show_file(
string

&
path)
{
    stack

<
string
>
find_file;
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
   
    find_file.push(path);

   
while
(
!
find_file.empty())
    {
       

string
find_path
=
find_file.top();       
        find_file.pop();
       
       

//
访问


       
string
dir;
       

int
index_of_slash
=
find_path.rfind(
'
//
'
);
        dir

=
find_path.substr(index_of_slash
+
1
,find_path.length()
-
index_of_slash);
       

for
(
int
i
=
0
;i
<
find_file.size();i
++
)
            cout

<<
"
  
"
;
        cout

<<
dir
<<
endl;
       
       

//
查找子目录/文件


        find_path
=
find_path
+
"
//*.*
"
;
       
        hFind

=
::FindFirstFile(find_path.c_str(),
&
FindFileData);
       

if
(hFind
==
INVALID_HANDLE_VALUE)
           

continue
;
       

do

        {
           

//
非目录直接输出,目录的话则压栈


           
if
(FindFileData.dwFileAttributes
&
FILE_ATTRIBUTE_DIRECTORY)
            {
               

if
(strcmp(FindFileData.cFileName,
"
.
"
)
==
0
||

                    strcmp(FindFileData.cFileName,

"
..
"
)
==
0
)
                   

continue
;

                find_path
=
find_path.assign(find_path,
0
,find_path.rfind(
'
//
'
));
                find_path

=
find_path
+
"
//
"
+
FindFileData.cFileName;
                find_file.push(find_path);                
            }
           

else

            {
               

for
(
int
i
=
0
;i
<=
find_file.size();i
++
)
                    cout

<<
"
  
"
;
                cout

<<
FindFileData.cFileName
<<
endl;
            }
        }
       

while
(FindNextFile(hFind,
&
FindFileData));   
    }
}


int
main()
{
   

string
path(
"
E://电影音乐
"
);
    show_file(path);

   
return

0
;
}

抱歉!评论已关闭.