没有合适的资源?快使用搜索试试~ 我知道了~
首页C/C++文件操作手册
资源详情
资源评论
资源推荐
C/C++ 文件读写操作总结
在编程的过程中,文件的操作是一个经常用到的问题,在 C++Builder 中,可以使用多种方
法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:
1、基于 C 的文件操作;
2、基于 C++的文件操作;
3、基于 WINAPI 的文件操作;
4、基于 BCB 库的文件操作;
5、特殊文件的操作。
壹、基于 C 的文件操作
在ANSI C 中,对文件的操作分为两种方式,即流式文件操作和 I/O 文件操作,下面就
分别介绍之。
一、流式文件操作
这种方式的文件操作有一个重要的结构 FILE,FILE 在 stdio.h 中定义如下:
typedef struct {
int level; /* fill/empty level of buffer */
unsigned flags; /* File status flags */
char fd; /* File descriptor */
unsigned char hold; /* Ungetc char if no buffer */
int bsize; /* Buffer size */
unsigned char _FAR *buffer; /* Data transfer buffer */
unsigned char _FAR *curp; /* Current active pointer */
unsigned istemp; /* Temporary file indicator */
short token; /* Used for validity checking */
} FILE; /* This is the FILE object */
FILE 这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来
进行,此种文件操作常用的函数见下表 函数 功能
fopen() 打开流
fclose() 关闭流
fputc() 写一个字符到流中
fgetc() 从流中读一个字符
fseek() 在流中定位到指定的字符
fputs() 写字符串到流
fgets() 从流中读一行或指定个字符
fprintf() 按格式输出到流
fscanf() 从流中按格式读取
feof() 到达文件尾时返回真值
ferror() 发生错误时返回其值
rewind() 复位文件定位器到文件开始处
remove() 删除文件
fread() 从流中读指定个数的字符
fwrite() 向流中写指定个数的字符
tmpfile() 生成一个临时文件流
tmpnam() 生成一个唯一的文件名
下面就介绍一下这些函数
1.fopen()
fopen 的原型是:FILE *fopen(const char *filename,const char *mode),fopen 实现三个功
能
为使用而打开一个流
把一个文件和此流相连接
给此流返回一个 FILR 指针
参数 filename 指向要打开的文件名,mode 表示打开状态的字符串,其取值如下表
字符串 含义
"r" 以只读方式打开文件
"w" 以只写方式打开文件
"a" 以追加方式打开文件
"r+" 以读/写方式打开文件,如无文件出错
"w+" 以读/写方式打开文件,如无文件生成新文件
一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当
成一个字符''\n'',而二进制模式认为它是两个字符 0x0D,0x0A;如果在文件中读到 0x1B,文
本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一
定的方式对数据作相应的转换。
系统默认的是以文本模式打开,可以修改全部变量_fmode 的值来修改这个设置,例如
_fmode=O_TEXT;就 设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打
开方式是二进制模式。
我们也可以在模式字符串中指定打开的模式,如"rb"表示以二进制模式打开只读文件,
"w+t"或"wt+"表示以文本模式打开读/写文件。
此函数返回一个 FILE 指针,所以申明一个 FILE 指针后不用初始化,而是用 fopen()来
返回一个指针并与一个特定的文件相连,如果成败,返回 NULL。
例:
FILE *fp;
if(fp=fopen("123.456","wb"))
puts("打开文件成功");
else
puts("打开文件成败");
2.fclose()
fclose()的功能就是关闭用 fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,
返回 0,失败返回 EOF。
在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就
经常犯这样的毛病。
例:fclose(fp);
3.fputc()
向流写一个字符,原型是 int fputc(int c, FILE *stream); 成功返回这个字符,失败返回
EOF。
例:fputc(''X'',fp);
4.fgetc()
从流中读一个字符,原型是 int fputc(FILE *stream); 成功返回这个字符,失败返回 EOF。
例:char ch1=fgetc(fp);
5. fseek()
此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是 int
fseek(FILE *stream, long offset, int whence);如果成功返回 0,参数 offset 是移动的字符数,
whence 是移动的基准,取值是
符号常量 值 基准位置
SEEK_SET 0 文件开头
SEEK_CUR 1 当前读写的位置
SEEK_END 2 文件尾部
例:fseek(fp,1234L,SEEK_CUR);//把读写位置从当前位置向后移动 1234 字节(L 后缀表示长
整数)
fseek(fp,0L,2);//把读写位置移动到文件尾
6.fputs()
写一个字符串到流中,原型 int fputs(const char *s, FILE *stream);
例:fputs("I Love You",fp);
7.fgets()
从流中读一行或指定个字符,原型是 char *fgets(char *s, int n, FILE *stream); 从流中读
取 n-1 个字符,除非读完一行,参数 s 是来接收字符串,如果成功则返回 s 的指针,否则返
回 NULL。
例:如果一个文件的当前位置的文本如下
Love ,I Have
But ……..
如果用
fgets(str1,4,file1);
则执行后 str1="Lov",读取了 4-1=3 个字符,而如果用
fgets(str1,23,file1);
则执行 str="Love ,I Have",读取了一行(不包括行尾的''\n'')。
8.fprintf()
按格式输入到流,其原型是 int fprintf(FILE *stream, const char *format[, argument, …]);
其用法和 printf()相同,不过不是写到控制台,而是写到流罢了
例:fprintf(fp,"%2d%s",4,"Hahaha");
9.fscanf()
从流中按格式读取,其原型是 int fscanf(FILE *stream, const char *format[, address, …]);
其用法和 scanf()相同,不过不是从控制台读取,而是从流读取罢了。
例:fscanf(fp,"%d%d" ,&x,&y);
10.feof()
检测是否已到文件尾,是返回真,否则返回 0,其原型是 int feof(FILE *stream);
例:if(feof(fp))printf("已到文件尾");
11.ferror()
原型是 int ferror(FILE *stream);返回流最近的错误代码,可用 clearerr()来清除它,clearerr()
的原型是 void clearerr(FILE *stream);
例:printf("%d",ferror(fp));
12.rewind()
把当前的读写位置回到文件开始,原型是 void rewind(FILE *stream);其实本函数相当于
剩余13页未读,继续阅读
小小侠
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- stc12c5a60s2 例程
- Android通过全局变量传递数据
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0