C/C++ 读取大文件的方法有以下几种:
- 使用 fread() 函数:fread() 函数可以一次性读取一个文件的全部内容,但是如果文件过大,可能会导致内存溢出。
- 使用 fgets() 函数:fgets() 函数可以一次性读取一行文件内容,可以避免内存溢出的问题,但是读取速度会比较慢。
- 使用 mmap() 函数:mmap() 函数可以将文件映射到内存中,可以提高读取速度,但是也会占用大量内存。
对于上述的三种读取方法c语言能用上的基本就是前两种,第三种的具体使用需要调用头文件<sys/mman.h>,具体操作需要查相关资料。
fgetc与fgets的区别
区别:
1、fgetc ()用于从打开的文件中读取一个字符,并返回一个包含有一个字符的字符串;而fgets ()用于从打开的文件中读取一行数据,并返回指定长度的字符串。
2、fgetc ()函数只接受一个参数,而fgets ()函数可接受两个参数。
写入文件函数
1、fwrite(const void *buffer, size_t size, size_t count , FILE *stream)
fwrite(buffer,size,count,fp); (易于理解)
buffer : 数据存储的地址
size : 要读取的字节的大小
count : 要读取多少个size大小
stream : 等待被读取的数据源,它是一个指向FILE结构的文件指针
至于返回值,如果成功执行,则返回写入元素的个数,如果不和nmemb相等,则表示出错。
fread()与fwrite()函数的参数相同。(通过使用fread()函数,来读取通过fwrite()写入的文件数据)
2、fputs(const char *s,FILE *stream)
功能: 将s中的字符串写到文件中;
参数: s: 字符串的首地址。
stream :文件
返回值:
成功返回大于0的数
失败返回EOF(-1)
fputs() 和 puts() 的小差异:
1、puts() 只能向标准输出流输出,而 fputs() 可以向任何流输出。
2、使用 puts() 时,系统会在自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符。
fscanf()和fprintf()函数:格式化读写函数
fscanf 函数原型为 int fscanf(FILE * stream, const char * format, [argument...]); 其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到argument中,遇到空格和换行时结束
文件定位必不可少的函数fseek
fseek函数的结构组成
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,10,0);(fseek(fp,10,SEEK_SET))把fp指针移动到离文件开头100字节处;
fseek(fp,10,1);(fseek(fp,10,SEEK_CUR))把fp指针移动到离文件当前位置100字节处;
fseek(fp,10,2);(fseek(fp,10,SEEK_END))把fp指针退回到离文件结尾100字节处
清除标记重新定位指针——rewind ()函数的用法
rewind ()函数用于将文件指针重新指向文件的开头,同时清除和文件流相关的错误和eof标记,相当于调用fseek (stream, 0, SEEK_SET)。
用法rewind (FILE *stream)
获取文件大小——ftell函数
函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数
用法ftell(FILE *stream)
fopen函数打开方式一览表
1、“r”以只读方式打开一个文件;
2、“w”以只写方式打开一个文件;
3、“a”打开一个文件追加;
4、“rb”以只读方式打开一个二进制文件;
5、“rw”以只写方式打开一个二进制文件;
6、“ra”打开一个二进制文件追加;
7、”r+”以读写方式打开一个文件;
8、“w+”以读写方式建立一个文件;
9、“a+”以读写方式打开一个文件追加;
10、“rb+”以读写方式打开一个二进制文件;
11、“wb+”以读写方式建立一个二进制文件;
12、“ab+”以读写方式打开一个二进制文件追加。
r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(banary): 二进制文件 +: 读和写