首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c有没有函数可以把文件里的一行删掉`在不全部读出来再重写进去的情况下` 或者方法?该怎么处理

2012-03-13 
c有没有函数可以把文件里的一行删掉`,在不全部读出来再重写进去的情况下``? 或者方法?c有没有函数可以把文

c有没有函数可以把文件里的一行删掉`,在不全部读出来再重写进去的情况下``? 或者方法?
c有没有函数可以把文件里的一行删掉`,在不全部读出来再重写进去的情况下``?   或者方法?

[解决办法]
FILE* fp = fopen( "a.txt ", "r+ ");
fseek(fp, 10, SEEK_SET);
fprintf(fp, "xyz ");
fclose(fp);
[解决办法]
跟c没有关系。
现有的操作系统所实现的文件系统决定了没有可能实现你的要求。
[解决办法]
FILE* fp = fopen( "a.txt ", "r+ ");
fseek(fp, 10, SEEK_SET);
fprintf(fp, "xyz ");
fclose(fp);
-------------------------------------------
FILE* fp = fopen( "a.txt ", "r+ ");
fseek(fp, 0, 0);
fprintf(fp, "xyz ");
fclose(fp);
如果文件开头本来有东西那这样写以后那些还会在吗`


你关了文件在打开文件指针就回到开头了,你也可以把文件指针seek 回去。

seek 有三种方式,start current and end
[解决办法]
#include <stdio.h>
#include <string.h>



void InsertLine(char* FileName,int L,char str[256])
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]= " ";
char tmp[50][256]={0};
//char str[256]= "Good China\n ";

if( (fp=fopen(FileName, "r+ "))==NULL)
{
printf( "Can 't open file!\n ");
return;
}
while( fgets(Buf,256,fp) )
{
Lid++;
if(Lid==L)
strcpy(tmp[Lid++],str);
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
for(Lid=1;Lid <=MaxLine;Lid++)
fputs(tmp[Lid],fp);
fclose(fp);


}


void cat(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);
}


void deleteLine(char* FileName,int lineno)
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]= " ";
char tmp[20][256]={0};
char *p = Buf;

// char str[256]= "Good China\n ";

if( (fp=fopen(FileName, "r+ "))==NULL)
{
printf( "Can 't open file!\n ");
return;
}
while((p=fgets(Buf,256,fp))!=NULL)
{
Lid++;
if(Lid==lineno)
{
if((p=fgets(Buf,256,fp))!=NULL) // 原文多了个分号
{
strcpy(tmp[Lid],Buf);
}
}
else
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
fclose(fp);
remove(FileName); // 删除原文件
if( (fp=fopen(FileName, "w "))==NULL)
{
printf( "Can 't open file!\n ");
return;
}
for(Lid=1;Lid <=MaxLine;Lid++) // 多写一行


fputs(tmp[Lid],fp);
fclose(fp);


}




int main()
{
cat( "1.txt ");
printf( "\n......................................................\n ");
InsertLine( "1.txt ",3, "7777\n ");
cat( "1.txt ");

printf( "\n......................................................\n ");
deleteLine( "1.txt ",3);
printf( "\n......................................................\n ");
cat( "1.txt ");
return 0;
}

[解决办法]
删除方案1:文件开始存储记录数,要删除一条记录必须依次将其后面的记录前移sizeof(YourRecordType)。
更新方案1:保证你的记录长度是固定大小的!要更新一条记录找到该条记录,然后从该记录开始出写入一条新的纪录,新的记录如果跟原先的记录大小一致的话,恰好将其覆盖掉,已达到更新的目的。

热点排行