C语言文件的读写操作

这篇具有很好参考价值的文章主要介绍了C语言文件的读写操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,文件

1.文本模式,二进制模式

2.标准文件

二,文件的打开和关闭

1.文件指针

1.1文件的打开

 1.2文件的关闭

三,文件的顺序读写 

1.fgetc

2.fputc

3.fgets

4.fputs

5.fprintf

6.fscanf

7.fwrite

8.fread

 9.表格

四,文件的随机读写

1,fseek 

 2,ftell

3,rewind

判断文件结束

1,feof

2,判断结束

文件使用模式(表格)

文本文件的部分代码示例

二进制文件的部分代码


一,文件

C把文件看作是一系列的连续的字节,每个字节都能被单独读取。

C提供两种文件模式:文本模式和二进制模式

1.文本模式,二进制模式

   首先要区分文本内容和二进制内容,文本文件格式和二进制文件格式,及文件的文本模式和二进制模式。

  1. 文本内容:如果文件最初使用的是二进制编码的字符(如ASCII码)表示文本,该文件就是                      文本文件,其中包含文本内容。
  2. 二进制内容:如果文件中的二进制值代表机器语言代码或数值数据,图片或者音乐编码,该                       文件就是二进制文件,其中包含二进制内容。

2.标准文件

  c程序自动打开的三个文件

  1. 标准输入(stdin):为程序提供输入,getchar()和scanf()使用的文件。
  2. 标准输出(stdout):为程序提供输出,putchar()、printf()和puts()使用的文件。
  3. 标准错误输出(stderr):提供一个逻辑上不同的地方来发送错误信息。

二,文件的打开和关闭

1.文件指针

每个被使用的文件都在内存中开辟了一个相对应的文件信息区,用来存放文件的相关信息。这些信息是保存在一个结构体变量中的,这个结构体类型是由系统声明的取名FILE(文件)。

定义一个文件指针变量:

FILE * pf ;//文件指针变量,指向被操作的文件

1.1文件的打开

  打开文件我们用到一个打开文件的函数 fopen()查找库函数得知 :

C语言文件的读写操作

所以我们用文件指针接受打开的文件可操作流:

FILE * pf = fopen("文件名.后缀","打开方式");
//打开文件之后要判断有没有打开成功
if(pf==NULL) //打开失败返回NULL
 perror("fopen");
 //perror报错函数,会打印括号里面的错误信息

是一个高度抽象的概念:

         程序直接传输到外部设备比较繁琐,所以写入流,让流操作

C语言文件的读写操作

 下述所有的流 同时包括 FILE文件指针pf。

 1.2文件的关闭

      关闭与流关联的文件并取消关联,使用fcloae():

C语言文件的读写操作

fclose(pf);//关闭文件
pf=NULL; //置空指针

注意

  1. 打开文件是有限的,只打开不释放,最后会打不开文件。
  2. 路径错误也会导致打不开文件
  3. 可以用绝对路径打开文件,但是要注意转义字符(目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径)。

      

三,文件的顺序读写 

       先简单介绍所有的读写函数,然后再附上表格。

       所有用到的pf都表示文件指针。

1.fgetc

从流中获取字符

C语言文件的读写操作

参数是标准输入流 

        读一次向后移动 1 ,类似于指针的 ++ ,当读取超出文件长度 出EOF(-1) ;

int ret =  fgetc(pf);

2,fputc

将字符写入流

C语言文件的读写操作

 两个参数一个是 字符,一个是 标准输出流(stdout,stderr)

fputc('字符',输出流);

3.fgets

从流中获取字符串写入目标数组

 C语言文件的读写操作

第一个参数是 目标数组的指针;

第二个复制到数组的最大个数(n-1个,最后一个放'\0');

第三个参数是标准输入流。

fgets(arr,4,pf);

4.fputs

将字符串写入流

C语言文件的读写操作

第一个参数是要写入流的地址指针;

第二个参数是标准输出流。

fputs("abcdef\n",pf);

5.fprintf

将格式化数据写入流

C语言文件的读写操作

第一个参数是标准输出流

第二个参数是格式化字符串等一系列的东西

Typedef struct S{
  char arr[10];
  int num;
  float sc;
}s;
fprintf(pf,"%s %d %d ",s.arr,s.num,s.sc) ;

6.fscanf

从流中读取格式化数据

C语言文件的读写操作

第一个参数是标准输入流

第二个参数是格式化字符串等一系列的东西

fscanf(pf,"%s %d %f",&(s.arr),&(s,num),&(s.sc));

7.fwrite

以二进制的方式写文件

C语言文件的读写操作

第一个参数是写入元素数组的指针

第二个参数是要写入的每个元素的大小(单位字节)

第三个参数是要写入的元素个数

第四个参数是要被写入的地址

fwrite(&s,sizeof(struct S) , 1 ,pf) ;
//从s中找到1个元素,元素大小是sizeof(struct S)的数据,写到pf中

8.fread

以二进制的方式读文件

C语言文件的读写操作

第一个参数是接收读取文件内容的地址

第二个参数是要读取文件的大小

第三个参数是要读取文件的个数

第四个参数是被读取文件的地址

fread(&s,sizeof(struct S),1,pf);
//从pf里读取1个大小为sizeof(struct S)的文件到s中去

 9.表格

函数 功能 适用于
fgetc 字符输入函数(读文件 所有输入流
fputc 字符输出函数(写文件 所有输出流
fgets 文本行输入函数(读一行 所有输入流
fputs 文本行输出函数(写一行 所有输出流
fscanf 格式化输入函数 ( 所有输入流
fprintf 格式化输出函数( 所有输出流
fread 二进制输入  ( 文件
fwrite 二进制输出  ( 文件

这里会有些迷惑,为什么输出函数后面会标注 写,输入函数后面 标注 读 。

这里的读写 是面向内存的,也就是说对于用户来说的输入,对于内存来说是读,就是读取用户的输入信息,或者是别的位置的数据;对用户来说的输出,对于内存来说是写,就是写出信息让用户可以看到。

四,文件的随机读写

1,fseek 

根据文件指针的位置和偏移量来定位文件指针

C语言文件的读写操作

第一个参数 流

第二个参数 偏移量

第三个参数 起始位置

起始位置选项: SEEK_CUR :文件当前位置开始

                          SEEK_END : 文件末尾位置开始

                          SEEK_SET  : 文件起始位置开始

 2,ftell

返回文件指针的当前位置

C语言文件的读写操作

 参数是 流

3,rewind

让文件指针回到起始位置

C语言文件的读写操作

 参数是 流

判断文件结束

1,feof

当文件读取结束时,判断文件是读取失败结束,还是遇到文件尾(读取完成)结束。

C语言文件的读写操作

2,判断结束

判断结束不可以用feof的返回值直接判断文件是否结束,但可以通过以下几种方式:

  1. fgets 判断返回值是否为 EOF
  2. fgets 判断返回值是否为NULL
  3. fread判断返回值是否小于实际要读取的个数

文件使用模式(表格)

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

" wx " ," wbx " , " w+x " , " wb+x " 或 " w+bx "

类似于不含有x的模式,如果文件已经存在或以独占模式被打开,则打开文件失败


文本文件的部分代码示例

 int c; //处理EOF,EOF的值是-1,不可以用 char类型 
 FILE *pf = fopen("test.c","r") ;//这里的文件名知识一个例子
 if(!pf)//判断打开文件是否成功
{
 perror("FILE error"); 
 return EXIT_FAILURE;//值为1, 运行程序失败
}
//fgetc读取失败时或者遇到文件结尾时返回EOF
 while((c = fgetc(pf) ) != EOF)
{
 putchar(c); 
}
//判断结束原因
 if(ferror(pf))
{
 printf("I/O error");
} 
 else if(feof(pf) ) //前一个没有出现错误说明是正常结束
{
 printf("END of FILE ……");
}
//ferroe 初始化为0 ,返回非0 的时表面出错

//关闭文件
fclose(pf);

二进制文件的部分代码

enum {
	size = 5
};
//枚举 ,后面的size大小是5
double a[size] = { 1,2,3,4,5 };
FILE * pf = fopen("test.c", "wb"); //打开文件
fwrite(a, sizeof(a), size, pf); //fwirte的返回值是一个size_t类型
fclose(pf);//关闭文件

double b[size];
FILE * pf = fopen("test.c", "rb");
size_t ret = fread(b, sizeof(b), size, pf);//读取

if(ret == 1) //当ret == 1 时,读取成功
{
	puts("successfully :");
	for (int n = 0; n < size; n++)//打印内容
	{
		printf("%f ",b[n]);
	}
	putchar('\n');
}
else //失败时判断失败的原因
{
	if (feof(pf))
	{
		printf("end of file:");
	}
	else if (ferror(pf))
	{
		perror("Error:");
	}
}
fclose(pf);//关闭文件

上述两个代码段,需要放到具体内容里,用合适的变量接受具体的返回值,返回值类型上文都有介绍。文章来源地址https://www.toymoban.com/news/detail-495076.html

到了这里,关于C语言文件的读写操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++文件操作基础 读写文本、二进制文件 输入输出流 文件位置指针以及随机存取 文件缓冲区以及流状态

    文本文件一般以行的形式组织数据。 包含头文件: #include fstream 类: ofstream(output file stream) ofstream 打开文件的模式(方式):类内open()成员函数参数2.参数1是文件存储/创建路径 例如:fout.open(filename,ios::app); 对于 ofstream,不管用哪种模式打开文件,如果文件不存在,都会创

    2024年01月25日
    浏览(39)
  • C语言文件的读写操作

    目录 一,文件 1.文本模式,二进制模式 2.标准文件 二,文件的打开和关闭 1.文件指针 1.1文件的打开  1.2文件的关闭 三,文件的顺序读写  1.fgetc 2.fputc 3.fgets 4.fputs 5.fprintf 6.fscanf 7.fwrite 8.fread  9.表格 四,文件的随机读写 1,fseek   2,ftell 3,rewind 判断文件结束 1,feof 2,判断

    2024年02月10日
    浏览(29)
  • C语言如何使用文件读写来处理文件操作?

    首先,让我们来谈谈文件读写,这听起来有点像一个神秘的活动,就像你是一个特工在阅读和修改机密文件一样!所以,假设你是一个特工小鱼,正在进行秘密任务。 首先,你需要给自己起一个特工代号。我们先把你叫做Agent007。接下来,你需要打开一个目标文件,就像你发

    2024年02月12日
    浏览(37)
  • 【c语言】二进制文件的读写操作

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 本文基

    2024年02月12日
    浏览(31)
  • vim三种模式,文本操作(操作字符/光标,列出行号可视化块模式/多文件查看)

    目录  vim--文本编辑器 功能 基本概念  命令/默认模式 插入模式 底行模式 文本操作 引入 移动光标位置 删除字符 -- x/dd 复制/粘贴字符 -- yw/yy+p 替换文本 -- r / %s 底行模式 全局替换 -- /g 撤销操作 -- u / ctrl+r 修改字符 -- cw 示例 跳行 -- ctrl+g 底行模式 列出行号(底行模式) -- se

    2024年02月06日
    浏览(31)
  • flutter:文件系统目录、文件读写

    参考:老孟 文件存储和网络请求 Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart IO 库来操作文件的。但是不同的平台对应的文件系统是不同的,比如文件路径,因此通常使用Google 官方

    2024年02月09日
    浏览(37)
  • R语言【base】——dir.exists()和dir.create()目录和文件权限的操作

    Package  base  version 4.3.2 参数【path】 :是一个字符向量,包含一个路径名。 参数【paths】 :字符向量,其中包含文件或目录路径。 参数【showWarnings】 :逻辑值。是否应显示失败警告? 参数【recursive】 :逻辑值。是否应该创建路径中除最后一个元素之外的其他元素?如果为

    2024年02月04日
    浏览(31)
  • qt读写文本文件

    使用QFile类进行读写,使用Open函数打开文件,打开方式有: QIODevice::NotOpen 0x0000 不打开 QIODevice::ReadOnly 0x0001 只读方式 QIODevice::WriteOnly 0x0002 只写方式,如果文件不存在则会自动创建文件 QIODevice::ReadWrite ReadOnly | WriteOnly 读写方式 QIODevice::Append 0x0004 此模式表明所有数据写入到文

    2024年02月10日
    浏览(31)
  • C语言--文件操作详解(2)(文本文件和二进制文件,文件读取结束的判定,用函数进行文件的拷贝,文件缓冲区)

    本篇文章主要介绍了文本文件和二进制文件,文件读取结束的判定,如何使用函数进行文件的拷贝,文件缓冲区的相关知识。 以及具有保存功能的八功能通讯录的源码。 据数据的组织形式,数据文件被称为文本文件或者二进制文件。 ①数据在内存中以二进制的形式存储,如

    2024年02月08日
    浏览(38)
  • Qt多线程读写大型文本文件项目

    目录 一 功能列表 二 架构设计 三 代码实现 四 软件原型效果 五 测试验证 六 项目工程打包发布 七 项目完整源码获取 显示文件路径选择框,仅展示 .txt类型文件可选; 读取文本文件,显示到桌面控件中; 读取的文件使用多线程处理,不影响显示界面正常操作; 读取过来

    2024年02月01日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包