learn file op!

Posted on 2007-12-12 15:36 T.S Liu 阅读(236) 评论(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

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理