| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 308 人关注过本帖
标题:奇怪的文件操作,求高手指点一下
取消只看楼主 加入收藏
a6472953
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2010-9-30
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:1 
奇怪的文件操作,求高手指点一下
程序代码:
#include <stdio.h>
#include <string.h>
#define FILEPATH  "./test"
int InsertLine(char* FileName, char str[256]);
void print(char *filepath);

int main()
{  
    char lstr[256]="/share/t1";
           print(FILEPATH);  
   printf("\n......................................................\n");
    //gets(lstr);
    #if 1
       InsertLine( FILEPATH, lstr);  
       printf("insettline is end!\n");
       print(FILEPATH);  
   #endif
     return   0;  
}  

/**********************************************************************
* 函数名称: InsertLine
* 功能描述: 向文件插入指定字符串
* 访问的表: 无
* 修改的表: 无
* 输入参数: char* FileName 文件
*                 char str[256]  要插入的内容
*
***********************************************************************/
int InsertLine(char* FileName, char str[256])  
{  
   int   Lid=0;  
   int   MaxLine=0;  
   FILE *fp=NULL;  
   char   Buf[256]="";  
   char   tmp[50][256]={0};
    char   *p   =   Buf;
       
   if ((fp=fopen(FileName,"r+")) == NULL)  
   {  
        printf("Can't   open   file!\n");  
        return;  
   }
   p = fgets(Buf, 256, fp);
     while (p != NULL)  
   {
        Lid++;
        if(!strcmp(p,str))
        {
            printf("this is true! the line is:: %d\n",Lid);
            fclose(fp);
            return ;
        }
        strcpy(tmp[Lid],Buf);
        p = fgets(Buf, 256, fp);
   }
    printf("Lid=%d\n",Lid);
        strcpy(tmp[++Lid],str);   

    MaxLine=Lid;  
    rewind(fp);  
    for(Lid=1 ;Lid <= MaxLine;Lid++)
    {
        fputs(tmp[Lid],fp);
    }

    fclose(fp);  
} 
   
//输出到控制台   
void print(char *filepath)  
{  
    int  nl = 0;  
    FILE  *stream;  
    char  s[256];  
    char  *p   =   s;    
   
    stream = fopen(filepath, "r+");  
    while ((p = fgets(s, 256, stream)) != NULL)  
    {  
            nl++;  
      printf("Line  %d:  %s", nl, s);  
     }  
   
     fclose(stream); 
     printf("\n");      
}
该函数主要想实现 往test文件中插入一行字符串lstr;如果文件test中有lstr的话就不对文件进行任何操作,退出函数,没有的话就在test文件最后一行插入lstr
文件结构类似如下test:
/share/t1
/share/t2
/sha/t3

现在有一个奇怪的问题  如果我手动去改一下 test中的内容,不管test中有没有lstr字符串 它都会在test中最后一行插入lstr,例如:lstr=/sha/t3现在我改动了一些文件的第一行;函数执行结果如下
/share/home/t1  //我改动过的
/share/t2
/share/t3
/share/t3  ?????就这一行,上边明明有啊,为什么还添加啊????

不手动去修改test文件的话好像没有什么问题
感到很费解  ,我是在linux下运行的。是我程序的问题,还是什么问题。求高手解答
搜索更多相关主题的帖子: 文件 
2010-11-25 12:25
a6472953
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2010-9-30
收藏
得分:0 
回复 2楼 xiaomarn
谢谢你,问题已经解决了,和你说的一样
不知道你知道是什么原因造成:手动去该文件,与不改动前文件中的内容缺少了‘ \n’。我更想知道是什么原因造成的,是Linux下文件编辑器的问题还是什么原因造成的?
2010-12-03 18:09
快速回复:奇怪的文件操作,求高手指点一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066081 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved