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

[C语言]修改文件内容解决方案

2012-03-19 
[C语言]修改文件内容我在test.txt文件中存入一个字符串abcd,现在我要将b修改成p,我不想全部重新写,

[C语言]修改文件内容
我在test.txt文件中存入一个字符串"abcd",现在我要将'b'修改成'p',我不想全部重新写,只想修改'b'而不动其它字符.
我使用"a","a+","ab","ab+"等各种方式打开,然后使用rewind()或者是fseek()等函数,都不能达到预期的效果.
请问该如何实现呢?

[解决办法]
文件操作本来就只有读和写的概念,没有修改的概念,
要实现修改,就只能全部读出来,修改完后写回去。
[解决办法]
别用C库,用系统调用, open -> mmap -> 修改内存 -> close 。
[解决办法]
那如果要是大文件的话都读出来起不要系统瘫痪了...
[解决办法]
读出一个字符

C/C++ code
FILE *fd;fd=fopen("test.txt","r+");fseek(fd,1,SEEK_SET);char *ch;fread(ch,sizeof(char),1,fd);
[解决办法]
fseek可以做到的,没达到效果是你自己没做好。fseek移动文件指针到b处,再用fwrite修改为p就行了。
[解决办法]
探讨
读出一个字符

C/C++ codeFILE *fd;
fd=fopen("test.txt","r+");
fseek(fd,1,SEEK_SET);
char *ch;
fread(ch,sizeof(char),1,fd);


改完了,再存回去,楼主试试吧。

[解决办法]
探讨
那如果要是大文件的话都读出来起不要系统瘫痪了...

[解决办法]
探讨
别用C库,用系统调用, open -> mmap -> 修改内存 -> close 。

[解决办法]
C/C++ code
#include "stdio.h"main(){    FILE *in=fopen("f:\\test.txt","r");    FILE *out=fopen("f:\\back.txt","w");  /*out是充当临时文件作用*/    int ch=0;    if(!in)    {        printf("cann't open test.txt\n");        exit(1);    }    if(!out)    {        printf("cann't create back.txt\n");        exit(1);    }        /*开始复制*/    while(!feof(in))    {       ch=fgetc(in);       if(ch=='a') ch='p';       fputc(ch,out);    }    fclose(in);  fclose(out);      unlink("f:\\test.txt"); /*删除test.txt*/    rename("f:\\back.txt","test.txt"); /*改名*/    printf("ok!!!!!!\n");}
[解决办法]
rename("f:\\back.txt","f:\\test.txt"); /*改名*/

[解决办法]
探讨
VC中能否实现将一段数据覆盖至文件中某一段数据,而不修改文件中其它数据?

热点排行