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