【c++文本文件操作之查找且替换】mac系统xcode编译环境
2014-09-01 17:40
357 查看
#include <iostream> #include<fstream> #include <sys/dir.h> #include <sys/stat.h> using namespace std; void myreplace(const string& filename,const string& tofind,const string& toreplace); bool isDir(const char* path); void replaceInFiles(const char *path, const string& tofind, const string& toreplace); void replaceInFiles(const char *path, const string& tofind, const string& toreplace, int recursive); int main() { replaceInFiles("/Users/xuconglong/Desktop/text2", "n", "x"); return 0; } void myreplace(const string& filename,const string& tofind,const string& toreplace) { ifstream fin(filename.c_str(),ios_base::binary); string str(1024*1024*2,0); fin.read(&str[0],2*1024*1024); fin.close(); ofstream fout(filename.c_str(),ios_base::binary); string::size_type beg=0; string::size_type pos; string::size_type find_size=tofind.size(); string::size_type replace_size=toreplace.size(); if(0 == find_size) { cout << "no such file or no content" << endl; return; } unsigned count = 0; while((pos=str.find(tofind,beg))!=string::npos) { fout.write(&str[beg],pos-beg); fout.write(&toreplace[0],replace_size); beg=pos+find_size; count++; } fout.write(&str[beg],strlen(str.c_str())-beg); fout.close(); cout << "has replaced number:" << count << endl; } bool isDir(const char* path) { struct stat st; lstat(path, &st); return 0 != S_ISDIR(st.st_mode); } //遍历文件夹的驱动函数 void replaceInFiles(const char *path, const string& tofind, const string& toreplace) { unsigned long len; char temp[256]; //去掉末尾的'/' len = strlen(path); strcpy(temp, path); if(temp[len - 1] == '/') temp[len -1] = '\0'; if(isDir(temp)) { //处理目录 int recursive = 1; replaceInFiles(temp, tofind, toreplace, recursive); } else //输出文件 { printf("path:%s\n", path); myreplace(path, tofind, toreplace); } } //遍历文件夹de递归函数 void replaceInFiles(const char *path, const string& tofind, const string& toreplace, int recursive) { DIR *pdir; struct dirent *pdirent; char temp[256]; try{ pdir = opendir(path); }catch(const char *str) {printf("failed open dir");} if(pdir) { while((pdirent = readdir(pdir))) { //跳过"."和".." if(strcmp(pdirent->d_name, ".") == 0 || strcmp(pdirent->d_name, "..") == 0) continue; sprintf(temp, "%s/%s", path, pdirent->d_name); //当temp为目录并且recursive为1的时候递归处理子目录 if(isDir(temp) && recursive) { replaceInFiles(temp, tofind, toreplace, recursive); } else { printf("path:%s\n", temp); myreplace(temp, tofind, toreplace); } } } else { printf("opendir error:%s\n", path); } closedir(pdir); }
相关文章推荐
- 【c++文本文件操作之替换】mac系统xcode编译环境
- 【c++文本文件操作之查找文件夹】mac系统xcode编译环境
- 【c++文本文件操作之查找】mac系统xcode编译环境
- 【Lua】Mac系统下配置SublimeText的Lua编译环境
- 在MAC系统下构建uboot的gcc编译环境
- xcode 配置系统环境变量 Preporocessing 预编译宏的另一种写法, 系统的DEBUG 由来
- Iphone开发初期需要了解的Mac系统、Xcode环境、Cocoa框架
- 系统文件无意中被我操作后 再编译xcode报 fatal error 错误的解决办法
- Win端Unity 打包XCode项目导入虚拟机Mac系统使用XCode编译出现Unity-iPhone.xcodeproj cannot be opened
- cocos2d-x-3.10 之Mac系统Xcode环境搭建教程
- xcode中查找、修改变量名,类名及字符串的替换操作
- vmware安装mac的maverick 10.9系统后ios7开发环境xcode 5项目的运行(run不了项目)的解决方法
- Iphone开发初期需要了解的Mac系统、Xcode环境、Cocoa框架
- vi基本操作(2) -- 查找和替换
- 如何快速编译系统(用鼠标操作)
- 如何快速编译系统(用鼠标操作)
- 如何快速编译系统(用鼠标操作)
- 实现WEB页内容查找和替换操作
- 如何快速编译系统(用鼠标操作)