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

int main()
{ 

    char lstr[256]="/share/t1\n";     /*加个'\n'*/
    print(FILEPATH);
      printf("\n......................................................\n");
    /*gets(lstr);*/
    #if 1
       InsertLine( FILEPATH, lstr); 

       printf("insettline is end!\n");
       print(FILEPATH); 

   #endif
      getch();
      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++;
            /*printf("%s %s %d %d\n",p,str,strlen(Buf),strlen(str));*/
            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%d", nl, s,strlen(s));
     } 

  

     fclose(stream);
     printf("\n");     

}

2010-11-25 14:33
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.014163 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved