#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
;
}