| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1095 人关注过本帖
标题:关于文件的读写,请高手帮忙!
只看楼主 加入收藏
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main() { FILE *FpSource; char *str="012345678567890000"; int TestOk=0; long fpi=0; char ch; clrscr(); if((FpSource=fopen("e:\\bc31\\number.txt","w"))==NULL) { printf("Can not open the file!"); exit(0); } fwrite(str,strlen(str),1,FpSource); fclose(FpSource);

if((FpSource=fopen("e:\\bc31\\number.txt","r+"))==NULL) { printf("Can not open the file!"); exit(0); } rewind(FpSource); while(((ch=fgetc(FpSource))!=EOF)&&(TestOk==0)) { str[0]=str[1]; str[1]=str[2]; str[2]=str[3]; str[3]=ch; fpi++; if((str[0]=='5')&&(str[1]=='6')&&(str[2]=='7')&&(str[3]=='8')) TestOk=1; } if(TestOk) { printf("\nOK%d",fpi); str[0]='4';str[1]='4';str[2]='4';str[3]='4'; fseek(FpSource,fpi-4l,0); fwrite(str,4,1,FpSource); } fclose(FpSource); if((FpSource=fopen("e:\\bc31\\number.txt","r"))==NULL) { printf("Can not open the file!"); exit(0); } fread(str,fpi,1,FpSource); printf("\nstr=%s",str); fclose(FpSource); getch(); return 0; }

这个,看看可以么!!!随机数自己加!!!

[此贴子已经被作者于2004-11-16 15:22:46编辑过]


差点把你忘了...
2004-11-16 15:20
kekehaha
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2004-11-5
收藏
得分:0 

天使预备役大侠的程序把文件其它内容都栅了,

有没有办法只改“5678”这四个字,而不影响其它内容呢?

2004-11-17 11:00
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

没有呀,我的怎么没有删那???

哦,我知道了!!你把

if((FpSource=fopen("e:\\bc31\\number.txt","w"))==NULL) { printf("Can not open the file!"); exit(0); } fwrite(str,strlen(str),1,FpSource); fclose(FpSource);

注释掉,就可以了,我在开始的时候建了一个文件可以去掉!!!


差点把你忘了...
2004-11-17 11:26
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

我现在迷糊的地方就是,该文件的部分,关于

改文件的几中方式没有明白透,就是"r+"和"w+"和"a+"的区别是什么,

到底怎么用才可以?

[此贴子已经被作者于2004-11-17 11:41:48编辑过]


差点把你忘了...
2004-11-17 11:36
kekehaha
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2004-11-5
收藏
得分:0 

哦!

程我修改了一下:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main() { FILE *FpSource; int TestOk=0; long fpi=0; char ch; char cha='a'; char chb='a'; char chc='a'; char chd='a'; int A,B,C,D;

srand(time(NULL)); A=random(9); B=random(9); C=random(9); D=random(9);

clrscr();

if((FpSource=fopen("f:\\turboc2\\1.txt","r+"))==NULL) { printf("Can not open the file!"); exit(0); } rewind(FpSource); while(((ch=fgetc(FpSource))!=EOF)&&(TestOk==0)) { cha=chb; chb=chc; chc=chd; chd=ch; fpi++; if((cha=='5')&&(chb=='6')&&(chc=='7')&&(chd=='8')) TestOk=1; } if(TestOk) { printf("\nOK%d",fpi); cha=A;chb=B;chc=C;chd=D; fseek(FpSource,fpi+1,0); fputc(cha+48,FpSource); fputc(chb+48,FpSource); fputc(chc+48,FpSource); fputc(chd+48,FpSource); } printf("\n%d%d%d%d",A,B,C,D); fclose(FpSource); getch(); }

可以实现。

不过我不明白 fseek(FpSource,fpi+1,0); 这一句中为什么是fpi+1而不是fpi-4 ????

2004-11-17 16:04
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

错了,我运行你写的程序,错了,还应该是fpi-4;这样才对!

文件的随机读写   前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。   rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍 fseek函数。   fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。 其表示方法如表10.2。 起始点    表示符号    数字表示 ────────────────────────── 文件首    SEEK—SET    0 当前位置   SEEK—CUR    1 文件末尾   SEEK—END     2 例如: fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。


差点把你忘了...
2004-11-17 16:19
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

也可以不用fpi记数,而直接的写成fseek(FpSource,-4L,1);

看资料就是到,这是从文件指针的当前位置向前走4个字符!


差点把你忘了...
2004-11-17 16:25
快速回复:关于文件的读写,请高手帮忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017804 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved