c/c++ 替换文本文件中的字符串函数【方法二】linux、mac版本
2014-03-25 11:19
429 查看
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include<string>
#include<stdio.h>
#include <unistd.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <map>
using namespace std;
//求子串
char* substr(const
char*str, unsigned long start,
unsigned long end);
//替换文本. path:文件名, oriStr:将要替换的字符串、dstStr:替换的目的字符串
void replace(const
char *path, const char *oriStr,
const char *dstStr);
int main(int argc,
char** argv)
{
replace("/Users/zctech/Desktop/test/test.cpp",
"void", "MUSTN'T");
}
//替换文本. path:文件名, oriStr:将要替换的字符串、dstStr:替换的目的字符串
void replace(const
char *path, const char *oriStr,
const char *dstStr)
{
int fd = open(path,
O_RDWR);
//获取文件大小
struct stat sb;
fstat(fd, &sb);
unsigned char *start = (unsigned
char *)mmap(NULL, sb.st_size,
PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
if(start == MAP_FAILED)
/* 判断是否映射成功 */
{
printf("映射失败,文件过大或者没有权限");
return;
}
string str = "";
unsigned long i =
0;
while (i < sb.st_size)
{
if(0 ==
strcmp(oriStr, substr((char *)start, i, i +
strlen(oriStr))))
{
str += dstStr;
i += strlen(oriStr);
continue;
}
str += *(start + i);
i++;
}
close(fd);
munmap(start, sb.st_size);
/* 解除映射 */
FILE *fp = fopen(path,
"w");
fwrite(str.c_str(),
strlen(str.c_str()),
sizeof(char), fp);
fclose(fp);
}
//求子串
char* substr(const
char*str, unsigned long start,
unsigned long end)
{
unsigned long n = end - start;
static char stbuf[1024 *
1024];
strncpy(stbuf, str + start, n);
stbuf
= 0;
//字串最后加上0
return stbuf;
}
#include <sys/types.h>
#include <fcntl.h>
#include<string>
#include<stdio.h>
#include <unistd.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <map>
using namespace std;
//求子串
char* substr(const
char*str, unsigned long start,
unsigned long end);
//替换文本. path:文件名, oriStr:将要替换的字符串、dstStr:替换的目的字符串
void replace(const
char *path, const char *oriStr,
const char *dstStr);
int main(int argc,
char** argv)
{
replace("/Users/zctech/Desktop/test/test.cpp",
"void", "MUSTN'T");
}
//替换文本. path:文件名, oriStr:将要替换的字符串、dstStr:替换的目的字符串
void replace(const
char *path, const char *oriStr,
const char *dstStr)
{
int fd = open(path,
O_RDWR);
//获取文件大小
struct stat sb;
fstat(fd, &sb);
unsigned char *start = (unsigned
char *)mmap(NULL, sb.st_size,
PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
if(start == MAP_FAILED)
/* 判断是否映射成功 */
{
printf("映射失败,文件过大或者没有权限");
return;
}
string str = "";
unsigned long i =
0;
while (i < sb.st_size)
{
if(0 ==
strcmp(oriStr, substr((char *)start, i, i +
strlen(oriStr))))
{
str += dstStr;
i += strlen(oriStr);
continue;
}
str += *(start + i);
i++;
}
close(fd);
munmap(start, sb.st_size);
/* 解除映射 */
FILE *fp = fopen(path,
"w");
fwrite(str.c_str(),
strlen(str.c_str()),
sizeof(char), fp);
fclose(fp);
}
//求子串
char* substr(const
char*str, unsigned long start,
unsigned long end)
{
unsigned long n = end - start;
static char stbuf[1024 *
1024];
strncpy(stbuf, str + start, n);
stbuf
= 0;
//字串最后加上0
return stbuf;
}
相关文章推荐
- c/c++ 修改文本文件内容、替换字符串函数(linux、mac下)【增强版】Windows版会陆续发布
- linux下 c语言递归遍历文件夹下所有文件和子文件夹(附上替换文本文件内容的方法)
- linux下批量替换文件内容的方法
- Linux下批量替换文件内容方法
- 使用Linux的alternatives命令替换选择软件的版本方法
- Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)
- linux中在多个文件中查找替换文本的shell脚本
- Linux 中C文件调用C++代码的方法
- 如何替换某文件中的所有的特定字符?---linux sed命令(文本编辑命令) (转载)
- MAC下通过改apache配置文件切换php多版本的方法
- Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法
- Linux 删除和替换文件中某一行的方法【推荐】
- Linux下批量替换多个文件中的字符串的简单方法
- Linux下批量替换文件内容方法
- linux多文件替换关键字的方法
- linux 替换文件中指定字符串 方法
- linux下的windows文件替换^M方法
- (cc)2.6版本Linux上替换系统调用函数实现隐藏文件学习
- c/c++基础(二十七) Linux下core文件调试方法
- Linux下批量替换文件内容方法