Posted on 2007-12-12 15:36
T.S Liu 阅读(263)
评论(0) 编辑 收藏 引用 所属分类:
C++
1![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
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![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
9
FILE *fsrc=NULL,*ftmp=NULL;
10
char BUFF[256];
11
char tempfile[]="tempfileXXXXXX";
12
char *pbitdata=NULL;
13
const char *delim=",";
14![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
assert((NULL!=srcFile) && (loc>0) && (databit>=1 && databit<=2) && (data>=0 && data<=9));
16![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
if (NULL==(ftmp=fopen(mktemp(tempfile),"w+")))
18![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//如果打开临时文件失败
19
printf("<%s:%d>open(or create) file [%s] failed!\nERROR!!! %s\n",
20
__FILE__,__LINE__,tempfile,strerror(errno));
21![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
22
return 0;
23
}
24![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
if (NULL==(fsrc=fopen(srcFile,"r")))
26![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//如果打开源文件失败
27
printf("<%s:%d>open file [%s] failed!\nERROR!!! %s\n",
28
__FILE__,__LINE__,srcFile,strerror(errno));
29![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
30
fclose(ftmp);
31
remove(tempfile);
32![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
33
return 0;
34
}
35![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
36
while (!feof(fsrc))
37![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
38
char *tmpStr=NULL;
39
int curNum=1;
40![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
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![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//分割字符串
48
if (curNum++==loc)
49![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//已找到指定位置的数据
50
//如果不符合要求,则保留,否则删除
51
if (data!=*(pbitdata+databit-1)-48)
52
fputs(tmpStr,ftmp);
53![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
54
free(tmpStr);
55
tmpStr=NULL;
56![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
57
break;
58
}
59
pbitdata=strtok(NULL,delim);
60
}
61
//如果没有找到指定的位置
62
if (NULL!=tmpStr)
63![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
64
fputs(tmpStr,ftmp);
65![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
66
free(tmpStr);
67
tmpStr=NULL;
68
}
69
}
70![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
71
if (NULL==(fsrc=freopen(srcFile,"w",fsrc)))
72![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//重新打开源文件失败
73
printf("<%s:%d>reopen file [%s] failed!\nERROR!!! %s\n",
74
__FILE__,__LINE__,srcFile,strerror(errno));
75![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
76
return 0;
77
}
78
rewind(ftmp);
79![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
80
while (!feof(ftmp))
81![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{//更新至原来的文件
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![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
91
return 1;
92
}
93![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
94![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)