专栏首页大学生计算机视觉学习DeepLearningc++ 常用的遍历,删除,分割等等文件处理函数代码实现

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

原文作者:aircraft

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

删除文件目录函数:

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

以后用到其他c++的文件处理函数在补上去吧,反正来日FQ。嘿嘿。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码

    徐飞机
  • ImportError: No module named cv2 或 ModuleNotFoundError: No module named 'cv2'

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

    徐飞机
  • 基于最大主曲率算法和欧氏距离的指静脉识别 -----附带源码和解析文档

      暑假了就有时间写写博客了,大一的师弟们也要进入算法的领域了,于是我就写了一个简略版基于最大主曲率算法的指静脉识别给他们入门用,

    徐飞机
  • 自己动手提高ubuntu系统的性能(EXT3)

      在内核设置层面之上,还有很多个人用户配置的参数,ulimit命令就是bash下提供的,查看对指定应用的限制值的工具。你可以通过ulimit –a命令显示当前...

    一见
  • 腾讯云“云+创业”扶持计划

    腾讯云一直以来十分重视对初创企业的扶持,致力于赋能创业公司,降低企业的 IT 成本和研发成本。2017年6月21日~22日,腾讯云“云+未来”大会正式宣布新版“...

    云加创业小助手
  • 计算机浅谈及Linux简谈

    一、计算机浅谈: 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。 在现代,机械计算机的应用已经完全被...

    小小科
  • 702. 连接两个字符串中的不同字符

    连接两个字符串中的不同字符。 给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不...

    和蔼的zhxing
  • Leetcode 67 Add Binary

    Given two binary strings, return their sum (also a binary string). For example...

    triplebee
  • JavaScript事件对象与事件处理程序

    事件对象:在DOM触发事件时,会产生一个事件对象event,这个事件对象包含着所有与事件相关的信息。既然event是事件对象,那么它必然存在属性

    小蔚
  • 事件溯源模式

    使用只追加存储来记录对数据采取的完整系列操作,而不是仅存储域中数据的当前状态。 该存储可作为记录系统,可用于具体化域对象。 这样一来,无需同步数据模型和业务域,...

    只喝牛奶的杀手

扫码关注云+社区

领取腾讯云代金券