可以的。但是需要注意以下几点:
1 打开的时候,调用
FILE *fopen(char *name, char *mode);
时,参数mode要同时支持读写。也就是mode字符串中必须有+。
2 读写的时候,需要注意文件指针的位置,可以通过
int fseek(FILE *fp, int offset, int mode);
来调整文件指针位置。
mode有SEEK_SET, SEEK_CUR, SEEK_END三种。
a)SEEK_SET: 将指针移动到文件开始后的offset字节处;
b)SEEK_CUR:将指针移动到当前位置+offset字节处;
c)SEEK_END:将指针移动到文件结尾前offset字节处。
除SEEK_CUR外,其它两种的offset值必须为非负整数。
3 读写时,写入为覆盖操作,而不是插入。
不行,你想啊,那些数据都是按顺序存在硬盘上的,加入你在文件的中间插入一个数据,那后面的数据不都得往后推移一下?这种方法效率太低,所以直接被抛弃了。我建议你先把文件读到内存中,在内存中运算,然后输出到另一个文件中,这样才具有可行性。
struct A
{
int a;
struct A *next;
};
FILE *fp;
void baocun()
{
fp=fopen("wan.txt","w");
struct A *p;
p=head;
fprintf(fp,"%d\n",p->bh,p->name,p->a);
p=p->next;
while(p!=NULL)
{
fprintf(fp,"%d\n",p->a);
p=p->next;
}
fclose(fp);
}
void main()
{
fp=fopen("wan.txt","r");
fscanf(fp,"%d\n",&N);
struct A *p,*p1;
head=p=(A *)malloc(sizeof(A));
fscanf(fp,"%d\n",&p->a);
while(!feof(fp))
{
p1=(A *)malloc(sizeof(A));
p->next=p1;
p=p1;
fscanf(fp"%d\n",&p->a);
}
p->next=NULL;
fclose(fp);
//相关操作
baocun();
}