C++之linux下文件结构实现
/**********
huangsy13@gmail.com
FileStruct.h
**********/
#ifndef FILESTRUE
#define FILESTRUE
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include <sys/stat.h>
#include<dirent.h>
#include<vector>
#include<cstring>
#include<iostream>
#include <sstream>
#include <fstream>
using namespace std ;
string numToStr(int numn){
stringstream ss;
ss << numn;
string s2;
ss>>s2;
return s2;
}
void tranFile( string inFile, string outFile ){
fstream fsCopee( inFile.data(), ios::binary | ios::in ) ;
fstream fsCoper( outFile.data(), ios::binary | ios::out ) ;
fsCoper << fsCopee.rdbuf() ;
}
struct FileStruct{
string path;
std::vector<string> fileNames;
std::vector<string> dirNames;
FileStruct(){
}
FileStruct(string path0){
setUp(path0);
}
void setUp(string path0){
fileNames.clear();
dirNames.clear();
path = path0;
DIR *dp;
struct dirent *dirp;
if((dp=opendir(path.data()))==NULL){
return;
}
while((dirp=readdir(dp))!=NULL){
if((strcmp(dirp->d_name,".")==0)||(strcmp(dirp->d_name,"..")==0))
continue;
struct stat st;
string ss = path + "/" + dirp->d_name;
stat(ss.data() , &st );
if (S_ISDIR(st.st_mode))
dirNames.push_back(dirp->d_name);
else
fileNames.push_back(dirp->d_name);
}
closedir(dp);
}
int getFileNum(){
return fileNames.size();
}
int getDirNum(){
return dirNames.size();
}
string getFullDirPath(int o){
if (o >= getDirNum()){
return "";
}
return path+"/"+dirNames[o];
}
string getFullFilePath(int o){
if (o >= getFileNum()){
return "";
}
return path+"/"+fileNames[o];
}
string getFullDirPath(string str){
return path+"/"+str;
}
string getFullFilePath(string str){
return path+"/"+str;
}
bool isDir(string sPath = ""){
struct stat st;
string ss;
if (sPath == ""){
ss = path;
}
else{
ss = sPath;
}
stat(ss.data() , &st );
if (S_ISDIR(st.st_mode))
return true;
else
return false;
}
int getAllFileNum(){
int fileNum = 0;
for (int i = 0 ; i < getDirNum() ; i++){
FileStruct childFile(getFullDirPath(i));
fileNum += childFile.getAllFileNum();
}
return fileNum+getFileNum();
}
int getAllDirNum(){
int dirNum = 0;
for(int i = 0 ; i < getDirNum() ;i++){
FileStruct childFile(getFullDirPath(i));
dirNum += 1 + childFile.getAllDirNum();
}
return dirNum;
}
};
#endif
黄世宇/Shiyu Huang's Personal Page:https://huangshiyu13.github.io/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了