您的位置:首页 > 编程语言 > C语言/C++

C语言文件操作

2019-07-24 16:23 113 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_42512675/article/details/94780976

一切皆文件。

什么是文件?

磁盘上的文件是文件,但程序设计中,我们一般谈的文件有两种:程序文件、数据文件。
文件=文件属性+文件内容

文件名

文件路径+文件名主干+文件后缀
例如:C:\code\test.txt

文件类型

  1. 二进制文件:内存中以二进制形式存储,在硬盘上以相同方式存储。如 .exe文件。
  2. 文本文件:内存中以二进制形式存储,在硬盘上会有一定转化。如 .c / .h文件。

注意:excel不是文本文件。

一个数据在内存中如何存储?
字符一律以ASCII码形式存储。(ASCII码:数字和符号的对应关系,为了方便人看)
测试代码:

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int main() {
int a = 10000;
FILE* pf = fopen("test.txt", "wb");//前面的引号内为要打开的文件名,若无路径,则在当前路径下;
//w代表写入,b代表二进制形式。
fwrite(&a, 4, 1, pf);
fclose(pf);
pf = NULL;
system("pause");
return 0;
}

文件缓冲区

优点:节省时间
缺点:但数据有可能丢失

文件数据的缓冲方式:

  1. 无缓冲:(效率最低)
  2. 行缓冲:一般往显示器上打的都是,如printf。没有把缓冲区写满。(照顾用户)
  3. 全缓冲:必须缓冲区写满再刷。(效率最高)

文件指针

  1. 对文件进行操作时,文件指针必不可少;
  2. 程序启动时,打开文件时,可称为打开一个
  3. 文件指针又称为句柄
  4. 任何一个程序,默认启动时,打开三个流:
    (1)标准输入—>stdin—>键盘
    (2)标准输出—>stdout—>显示器
    (3)标准错误—>stderr—>显示器

键盘和显示器均为文件。

文件的打开和关闭

打开:fopen

FILE* fopen (const char* filename,const char* mode);

第一个参数为带或不带路径的文件,该文件可存在,也可不存在;
若不存在:

  1. 以写方式时,它会自动创建;
  2. 以读方式时,会报错;
    第二个为模式,模式有很多种。

关闭:fclose

int fclose(FILE* stream);

1.打开成功时,返回值为FILE*;
2.关闭时也必须传入FILE*。

打开方式如下:

文件使用方式 含义
“r”(只读) 为了输入数据,打开一个已经存在的文本文件
“w”(只写) 为了输出数据,打开一个文本文件
“a”(追加) 向文本文件尾添加数据
“rb”(只读) 为了输入数据,打开一个二进制文件
“wb”(只写) 为了输出一个数据,打开一个二进制文件
“ab”(追加) 向二进制文件尾添加数据
“r+”(读写) 为了读和写,打开一个文本文件
“w+”(读写) 为了读和写,建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写
“rb+” 为了读和写,打开一个二进制文件
“wb+”(读写) 为了读和写,新建一个新的二进制文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写

实例代码:

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int main() {
FILE * pFile;
pFile = fopen("myfile.txt", "w");
if (pFile != NULL) {
fputs("fopen example", pFile);
fclose(pFile);
}
system("pause");
return 0;
}

文件的顺序读写

(修改文件内容)

功能 函数名
字符输入函数 fgetc
字符输出函数 fputc
文本行输入函数 fgets
文本行输出函数 fputs
格式化输入函数 fscanf
格式化输出函数 fprintf
二进制输入 fread
二进制输出 fwrite

注意:fputs函数在写入时会自动将 \n 转为 \r\n 。

对比一组函数:

scanf/fscanf/sscanf
printf/fprintf/sprintf

printf:

int printf(const char* format, ...);

scanf:

int scanf(const char* format, ...);

fprintf:

int fprintf(FILE * stream, const char* format, ...);

fscanf:

int fscanf(FILE * stream, const char* format, ...);

sprintf:

int sprintf(char * str, const char* format, ...);

ssacnf:

int sscanf(char * str, const char* format, ...);

在C语言中,…表示可变参数。 sprintf , sscanf 可用于字符串转整形,整形转字符串。

文件的随机读写

(修改文件的属性)

fseek

通过修正文件读写位置和偏移量来指定地向文件特定位置去写。(无写入文件能力,只能指定位置,修改文件当前读写位置的属性。)

int fseek(FILE * stream, long int offset, int origin);
//offset为偏移量,可正可负;origin为初始位置

origin:
SEEK_SET—>文件开头
SEEK_CUR—>文件指针的当前位置
SEEK_END—>文件结束

ftell

告诉我们当前读写位置

long int ftell(FILE * stream);

rewind

让文件指针的位置回到文件的起始位置

void rewind(FILE * stream);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: