c++ 常用的遍历,删除,分割等等文件处理函数代码实现

180it 2020-10-13 AM 1476℃ 0条

删除文件目录函数:

void myDeleteDirectory(CString directory_path)
{
    CFileFind finder;
    CString path;
    path.Format(_T("%s/*.*"), directory_path);
    BOOL bWorking = finder.FindFile(path);
    while (bWorking)
    {
        bWorking = finder.FindNextFile();
        if (finder.IsDirectory() && !finder.IsDots())//处理文件夹
        {
            myDeleteDirectory(finder.GetFilePath()); //递归删除文件夹
            RemoveDirectory(finder.GetFilePath());
        }
        else//处理文件
        {
            DeleteFile(finder.GetFilePath());
        }
    }
    RemoveDirectory(directory_path);
}

创建文件目录函数:

int my_mkdir(const string &s)
{
    const char *fileName = s.data(), *tag;
    for (tag = fileName; *tag; tag++)
    {
        if (*tag == '\\')
        {
            char buf[1000], path[1000];
            strcpy(buf, fileName);
            buf[strlen(fileName) - strlen(tag) + 1] = NULL;
            strcpy(path, buf);
            if (access(path, 6) == -1)
            {
                mkdir(path);  //创建成功返回0 不成功返回-1
            }
        }
    }
}


分割目录字符串,比如只取文件名字不要文件格式(也是取得.之前的字符串或者.之后的字符串),当然也可以分割其他字符,看你传入的操作字符是 . 还是 / 之类咯:

vector<string> split(const string &s, const string &seperator){
    vector<string> result;
    typedef string::size_type string_size;
    string_size i = 0;

    while (i != s.size()){
        //找到字符串中首个不等于分隔符的字母;
        int flag = 0;
        while (i != s.size() && flag == 0){
            flag = 1;
            for (string_size x = 0; x < seperator.size(); ++x)
                if (s[i] == seperator[x]){
                    ++i;
                    flag = 0;
                    break;
                }
        }

        //找到又一个分隔符,将两个分隔符之间的字符串取出;
        flag = 0;
        string_size j = i;
        while (j != s.size() && flag == 0){
            for (string_size x = 0; x < seperator.size(); ++x)
                if (s[j] == seperator[x]){
                    flag = 1;
                    break;
                }
            if (flag == 0)
                ++j;
        }
        if (i != j){
            result.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return result;
}


将某个字符串中的某些字符替换函数:

string&   replace_all(string&   str, const   string&   old_value, const   string&   new_value)
{
    while (true)   {
        string::size_type   pos(0);
        if ((pos = str.find(old_value)) != string::npos)
            str.replace(pos, old_value.length(), new_value);
        else   break;
    }
    return   str;
}


c++遍历文件目录获取文件名字:

//获取特定格式的文件名

void getAllFiles(string path, vector<string>& files, string format)
{
    intptr_t    hFile = 0;//文件句柄  64位下long 改为 intptr_t
    struct _finddata_t fileinfo;//文件信息 
    string p;
    if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1) //文件存在
    {
        do
        {
            if ((fileinfo.attrib & _A_SUBDIR))//判断是否为文件夹
            {
                if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)//文件夹名中不含"."和".."
                {
                    files.push_back(p.assign(path).append("\\").append(fileinfo.name)); //保存文件夹名
                    getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, format); //递归遍历文件夹
                }
            }
            else
            {
                files.push_back(p.assign(path).append("\\").append(fileinfo.name));//如果不是文件夹,储存文件名
            }
        } while (_findnext(hFile, &fileinfo) == 0);
        _findclose(hFile);
    }
}


调用方法:

std::string m_filePath = "模板\\";
    std::vector<std::string> m_files;
    std::string m_format = "";                 //查找文件的格式
    getAllFiles(m_filePath, m_files, m_format);
    int size = m_files.size();
    int c_size;
    for (int i = 0; i < size; i++)
    {
            m_file[i];
        }



原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/9622851.html

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

c++ 常用的遍历,删除,分割等等文件处理函数代码实现