C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作

您所在的位置:网站首页 fwrite无法写入文件 C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作

C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作

2024-06-17 06:13| 来源: 网络整理| 查看: 265

C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想

c读写文件fopen C 库函数 FILE *fopen(const char *filename, const char *mode)

使用给定的模式 mode 打开 filename 所指向的文件。

包含头文件: #include fopen() 函数的声明 FILE *fopen(const char *filename, const char *mode) 参数

filename -- 这是 C 字符串,包含了要打开的文件名称。 mode -- 这是 C 字符串,包含了文件访问模式,模式如下:

r 以只读方式打开文件,该文件必须存在。 r+ 以可读写方式打开文件,该文件必须存在。 rb+ 读写打开一个二进制文件,允许读数据。 rt+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) wb 只写打开或新建一个二进制文件;只允许写数据。 wb+ 读写打开或建立一个二进制文件,允许读和写。 wt+ 读写打开或着建立一个文本文件;允许读写。 at+ 读写打开一个文本文件,允许读或在文本末追加数据,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。 ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。

有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。

文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(banary): 二进制文件 +: 读和写 二进制和文本模式的区别

1.在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。

2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。 返回值 : 如果文件顺利打开,返回指向该流的文件指针。如果文件打开失败则返回NULL,并把错误代码存在error中。

一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。

fopen()函数:

1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。

2.函数原型:

FILE * fopen(const char * path,const char * mode); -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" -- mode: 文件打开方式,例如: "r" 以只读方式打开文件,该文件必须存在。 "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)  "wb" 只写打开或新建一个二进制文件,只允许写数据。  "wb+" 读写打开或建立一个二进制文件,允许读和写。 "ab" 追加打开一个二进制文件,并在文件末尾写数据。 "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。 --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。 fwrite()函数:

1.作用:在C语言中fwrite()函数常用语将一块内存区域中的数据写入到本地文本。

2.函数原型:

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); -- buffer:指向数据块的指针 -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) -- count:数据个数 -- stream:文件指针

注意: 返回值随着调用格式的不同而不同:

(1) 调用格式:fwrite(buf,sizeof(buf),1,fp);

成功写入返回值为1(即count)

(2)调用格式:fwrite(buf,1,sizeof(buf),fp);

成功写入则返回实际写入的数据个数(单位为Byte)

注意事项:

写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

示例说明:

代码1: 下面代码可将1024个字(int)写入到文本文件,fwrite的调用中,size是sizeof(int),count是DATA_SIZE

#include "stdafx.h" #define _CRT_SECURE_NO_WARNINGS #include #include #define DATA_SIZE 1024 int main() {     unsigned int *dataPtr = NULL;     dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE);     for(unsigned int i=0;i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3