当一个文件夹里文件很多时,我们很容忘了每个文件夹里的内容,自己一个一个去看太麻烦,因此写了一个C++程序,在window系统下,能够自动生成指定文件夹内的文件目录,并在该文件夹下生成"目录.txt"文件保存该文件夹的目录结果,同时也会在当前页面打印结果,效果如下:
此处”D:\code“为我输入的文件夹地址,此地址可以到此电脑去复制。
生成的结果每个文件夹内的文件和子文件夹单独编号,之后是每个子文件夹的详细展开,前面的’-'数量代表当前文件的层数。
程序代码如下:
#include<bits/stdc++.h>
#include <io.h>
#include <dirent.h>
using namespace std;
typedef struct{
string name;
int lin;
}Node;
vector<Node>v; //存放最终结果
void dir(string path,int l=0)
{
vector<string> file;
vector<string> folder;
Node x;
int lin;
long hFile = 0;
struct _finddata_t fileInfo;
string pathName, exdName;
if ((hFile = _findfirst(pathName.assign(path).append("\\*").c_str(), &fileInfo)) == -1) {
cout<<"Not find the path or file"<<endl;
return;
}
do
{
if(fileInfo.attrib&_A_SUBDIR)
folder.push_back(fileInfo.name);
else
file.push_back(fileInfo.name);
} while (_findnext(hFile, &fileInfo) == 0);
_findclose(hFile);
x.lin=l;
int t=1;
if(!file.empty())
for(auto i :file){
x.name=std::to_string(t++);
x.name+="、 "+i;
v.push_back(x);
}
t=1;
if(!folder.empty()){
for(int i=0;i<folder.size();i++){
if(i<2) continue;
x.name=std::to_string(t++);
x.name+="、 "+folder[i];
v.push_back(x);
}
t=1;
for(int i=0;i<folder.size();i++){
if(i<2) continue;
x.name=std::to_string(t++);
x.name+="、 folder: "+folder[i];
v.push_back(x);
dir(path+"\\"+folder[i],l+1);
}
}
}
int main(){
string path;
string s;
FILE *fp = NULL;
cout<<"请输入文件夹地址(鼠标滑到此电脑顶部地址栏右键选择“将地址复制为文本”后粘贴到此处,然后按Enter):"<<endl;
cin>>path;
dir(path);
if(v.empty()) return 1;
//写入目录文件
s=path+"\\目录.txt";
fp = fopen(s.c_str(), "w");
for(auto i:v){
s="";
for(int j=0;j<i.lin;j++) s+="-";
s+=i.name+"\n";
fputs(s.c_str(), fp);
}
fclose(fp);
cout<<path+"\\目录.txt"+"文件已生成!\n内容如下:"<<endl;
//打印结果
for(auto i:v){
for(int j=0;j<i.lin;j++) cout<<"-";
cout<<i.name<<endl;
}
cout<<"输入任意字符关闭本页面"<<endl;
cin>>s;
return 0;
}
完整code::block项目代码文件:https://github.com/chadqiu/Windows-folder-catalog-auto-generator