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

原文作者:aircraft

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

删除文件目录函数:

AAffA0nNPuCLAAAAAElFTkSuQmCCvoid 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);

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

创建文件目录函数:

AAffA0nNPuCLAAAAAElFTkSuQmCCint 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            }

}

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCCvector split(const string &s, const string &seperator){

vector 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 

flag = 0;                    break;

}

}        //找到又一个分隔符,将两个分隔符之间的字符串取出;

flag = 0;

string_size j = i;        while (j != s.size() && flag == 0){            for (string_size x = 0; x 

flag = 1;                    break;

}            if (flag == 0)                ++j;

}        if (i != j){

result.push_back(s.substr(i, j - i));

i = j;

}

}    return result;

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCCstring&   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;

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC//获取特定格式的文件名void getAllFiles(string path, vector& 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);

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

调用方法:

AAffA0nNPuCLAAAAAElFTkSuQmCCstd::string m_filePath = "模板\\";

std::vector<: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 

{

m_file[i];

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

如果您的编译器不支持C++17,您可以使用旧的文件操作函数来删除一个目录下指定文件名的1.jpg和1.dat文件。以下是一个示例代码: ```cpp #include <iostream> #include <string> #include <dirent.h> #include <unistd.h> void deleteFiles(const std::string& directory, const std::string& filename) { DIR* dir = opendir(directory.c_str()); if (dir == nullptr) { std::cerr << "Failed to open directory: " << directory << std::endl; return; } dirent* entry; while ((entry = readdir(dir)) != nullptr) { std::string file = entry->d_name; if (file.find(filename) != std::string::npos && (file == "1.jpg" || file == "1.dat")) { std::string filepath = directory + "/" + file; if (unlink(filepath.c_str()) == 0) { std::cout << "Deleted: " << filepath << std::endl; } else { std::cerr << "Failed to delete file: " << filepath << std::endl; } } } closedir(dir); } int main() { std::string directory = "path/to/your/directory"; std::string filename = "1"; deleteFiles(directory, filename); return 0; } ``` 您只需将代码中的 `"path/to/your/directory"` 替换为您想要删除文件的目录路径,将 `"1"` 替换为您指定的文件名。此代码会打开目录,遍历目录下的所有文件,检查文件名是否包含指定的文件名,并且文件名为"1.jpg"或"1.dat",如果是则删除文件。 请注意,此代码使用了C语言文件操作函数(opendir、readdir、unlink),并结合C++进行了封装。这种方法在早期的C++标准中是常用文件操作方式。然而,这些函数在C++17中被新的文件系统库所取代,更推荐使用新的标准库来进行文件操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值