fopen fseek fwrite

songguozhi 2009-10-27 10:35:38
有如下几个问题:

1.怎么往文件指定的位置写入数据
2.怎么更新指定位置开始的某个大小区域中的内容

我发现往文件中添加内容还可以成功,但是我要更新指定区域的内容去怎么都不能实现!
...全文
329 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzeo11 2011-11-29
  • 打赏
  • 举报
回复
如果我即想保存文件的内容,又想随时可以定位文件,并且覆盖某个位置的文件,并且用fopen fseek fread fwrite 来实现,有没有好的建议?
awperpvip 2009-10-31
  • 打赏
  • 举报
回复
打开方式
chaoliu1024 2009-10-31
  • 打赏
  • 举报
回复
用fseek可以实现文件的定位
函数的原型为:
int fseek( FILE *stream, long offset, int origin );
origin有三个值,SEEK_CUR,SEEK_END,SEEK_SET,分别实现从当前位置,结束位置,开始位置的定位。
offset为距离origin的字节数。
whg01 2009-10-30
  • 打赏
  • 举报
回复
月底了,还不结贴。
xhd3767 2009-10-27
  • 打赏
  • 举报
回复
文件要是你自己维护的话,可以自己定义一个格式。
在你需要的地方写入文件末尾的指针,和size。
但是只是你自己在用...
hbvanguard 2009-10-27
  • 打赏
  • 举报
回复
1.用w+模式fopen文件,fseek到指定位置
2.fwrite
whg01 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 supermegaboy 的回复:]
先使用fseek将文件内部指针移动到欲进行修改的地方,然后覆盖就行了。

如果更新的内容与覆盖的内容相同大小,可以直接用上述方法,如果不等,就得先把那个地方及其后的内容读到内存,更新后,再写回去。
[/Quote]
正解
打开模式要用"r+"或"rb+"。
selooloo 2009-10-27
  • 打赏
  • 举报
回复
除了在内存中修改,还不知道有什么更好的办法
kakashi0309 2009-10-27
  • 打赏
  • 举报
回复
fopen时指定什么方式的? w+?

fwrite应该可以覆盖掉原来的
飞天御剑流 2009-10-27
  • 打赏
  • 举报
回复
先使用fseek将文件内部指针移动到欲进行修改的地方,然后覆盖就行了。

如果更新的内容与覆盖的内容相同大小,可以直接用上述方法,如果不等,就得先把那个地方及其后的内容读到内存,更新后,再写回去。
woods2001 2009-10-27
  • 打赏
  • 举报
回复
fseek函数定位到相应位置,然后写就可以了
不行google搜索一下人家写的代码就知道了

/* fseek example */
#include <stdio.h>

int main ()
{
FILE * pFile;
pFile = fopen ( "example.txt" , "w" );
fputs ( "This is an apple." , pFile );
fseek ( pFile , 9 , SEEK_SET );
fputs ( " sam" , pFile );
fclose ( pFile );
return 0;
}
bruce0532 2009-10-27
  • 打赏
  • 举报
回复
文件就是好比一个大内存,每一个文件都有一个文件指针 当我们打开时文件指针就在文件的开头,我们就是通过操作这个文件指针来操作文件的 如楼上所说我们可以用fseek函数来操作这个指针(即文件偏移)来在指定的位置读写
jackyjkchen 2009-10-27
  • 打赏
  • 举报
回复
fseek文件偏移,会用这个就行了
songguozhi 2009-10-27
  • 打赏
  • 举报
回复
struct _Chunk {
int ary[8192];
};
_Chunk Chunk[20];

int write_chunk()
{
FILE *fp;
char filename[80];

strcpy(filename, "chu_File");

//remove(filename);
if((fp=fopen(filename, "ab")) == NULL) {
return -1;
}
if (fseek(fp, CHUNK_OFFSET, SEEK_SET))
//if (fseek(fp, 0, SEEK_END))
return -1;
if (fwrite(Chunk, sizeof(Chunk), 1, fp)!=1) {
return -1;
}
fclose(fp);
if((fp=fopen(filename, "rb+")) == NULL) {
return -1;
}
if (fseek(fp, CHUNK_OFFSET, SEEK_SET))
return -1;
if (fwrite(&Chunk[0], sizeof(Chunk[0]), 1, fp)!=1) {
return -1;
}
fclose(fp);

return 0;
}
songguozhi 2009-10-27
  • 打赏
  • 举报
回复
struct _Chunk {
int ary[8192];
};
_Chunk Chunk[20];

int write_chunk()
{
FILE *fp;
char filename[80];

strcpy(filename, "chu_File");

//remove(filename);
if((fp=fopen(filename, "ab")) == NULL) {
return -1;
}
if (fseek(fp, CHUNK_OFFSET, SEEK_SET))
//if (fseek(fp, 0, SEEK_END))
return -1;
if (fwrite(Chunk, sizeof(Chunk), 1, fp)!=1) {
return -1;
}
fclose(fp);
if((fp=fopen(filename, "rb+")) == NULL) {
return -1;
}
if (fseek(fp, CHUNK_OFFSET, SEEK_SET))
return -1;
if (fwrite(&Chunk[0], sizeof(Chunk[0]), 1, fp)!=1) {
return -1;
}
fclose(fp);

return 0;
}

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧