奇怪的文件操作,求高手指点一下
程序代码:#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下运行的。是我程序的问题,还是什么问题。求高手解答








