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