Posted on 2007-12-12 15:36
T.S Liu 阅读(289)
评论(0) 编辑 收藏 引用 所属分类:
C++
1
2
/**//*
3
函数说明:
4
1)、srcFile为源文件,loc为要检查的位置,databit为要检查的数据位,data为需要排除的数据位
5
2)、成功返回1,失败返回0
6
*/
7
int updateContent(const char *srcFile,const int loc,const int databit, const int data)
8

{
9
FILE *fsrc=NULL,*ftmp=NULL;
10
char BUFF[256];
11
char tempfile[]="tempfileXXXXXX";
12
char *pbitdata=NULL;
13
const char *delim=",";
14
15
assert((NULL!=srcFile) && (loc>0) && (databit>=1 && databit<=2) && (data>=0 && data<=9));
16
17
if (NULL==(ftmp=fopen(mktemp(tempfile),"w+")))
18
{//如果打开临时文件失败
19
printf("<%s:%d>open(or create) file [%s] failed!\nERROR!!! %s\n",
20
__FILE__,__LINE__,tempfile,strerror(errno));
21
22
return 0;
23
}
24
25
if (NULL==(fsrc=fopen(srcFile,"r")))
26
{//如果打开源文件失败
27
printf("<%s:%d>open file [%s] failed!\nERROR!!! %s\n",
28
__FILE__,__LINE__,srcFile,strerror(errno));
29
30
fclose(ftmp);
31
remove(tempfile);
32
33
return 0;
34
}
35
36
while (!feof(fsrc))
37
{
38
char *tmpStr=NULL;
39
int curNum=1;
40
41
memset(BUFF,0,sizeof(BUFF));
42
if (NULL==fgets(BUFF,sizeof(BUFF),fsrc))
43
continue;
44
tmpStr=strdup(BUFF);
45
pbitdata=strtok(BUFF,delim);
46
while (NULL!=pbitdata)
47
{//分割字符串
48
if (curNum++==loc)
49
{//已找到指定位置的数据
50
//如果不符合要求,则保留,否则删除
51
if (data!=*(pbitdata+databit-1)-48)
52
fputs(tmpStr,ftmp);
53
54
free(tmpStr);
55
tmpStr=NULL;
56
57
break;
58
}
59
pbitdata=strtok(NULL,delim);
60
}
61
//如果没有找到指定的位置
62
if (NULL!=tmpStr)
63
{
64
fputs(tmpStr,ftmp);
65
66
free(tmpStr);
67
tmpStr=NULL;
68
}
69
}
70
71
if (NULL==(fsrc=freopen(srcFile,"w",fsrc)))
72
{//重新打开源文件失败
73
printf("<%s:%d>reopen file [%s] failed!\nERROR!!! %s\n",
74
__FILE__,__LINE__,srcFile,strerror(errno));
75
76
return 0;
77
}
78
rewind(ftmp);
79
80
while (!feof(ftmp))
81
{//更新至原来的文件
82
memset(BUFF,0,sizeof(BUFF));
83
if (NULL==fgets(BUFF,sizeof(BUFF),ftmp))
84
continue;
85
fputs(BUFF,fsrc);
86
}
87
fclose(fsrc);
88
fclose(ftmp);
89
remove(tempfile);
90
91
return 1;
92
}
93
94