zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    WMware下的Linux系统安装VMtools
    VMware虚拟机安装Ubuntu图文攻略
    Python高级编程(三)
    Python高级编程(二)
    Python高级编程(一)
    纯div+css样式弹出泡泡消息框
    EF应用CodeFirst模式,数据迁移的基本用法要点摘记
    sql左连接的误区
    ExtJs,从开始接触到如今,我都觉得你好垃圾阿。。。。
    EntityFramework经典的left join语法
  • 原文地址:https://www.cnblogs.com/huangshiyu13/p/6047754.html
Copyright © 2011-2022 走看看