Posted on 2007-12-12 15:36
T.S Liu 閱讀(289)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C++
1
2
/**//*
3
函數(shù)說明:
4
1)、srcFile為源文件,loc為要檢查的位置,databit為要檢查的數(shù)據(jù)位,data為需要排除的數(shù)據(jù)位
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
{//如果打開臨時(shí)文件失敗
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
{//已找到指定位置的數(shù)據(jù)
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