手记

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人推荐
随时随地看视频
慕课网APP