C打开文件 文本方式 二进制方式

合集下载

c语言文件操作(主要打开方式的区别)

c语言文件操作(主要打开方式的区别)

文件使用方式1.文件使用方式“rt” 只读打开一个文本文件,只允许读数据“wt” 只写打开或建立一个文本文件,只允许写数据“at” 追加打开一个文本文件,并在文件末尾写数据“rb” 只读打开一个二进制文件,只允许读数据“wb” 只写打开或建立一个二进制文件,只允许写数据“ab” 追加打开一个二进制文件,并在文件末尾写数据“rt+” 读写打开一个文本文件,允许读和写“wt+” 读写打开或建立一个文本文件,允许读写“at+” 读写打开一个文本文件,允许读,或在文件末追加数据“rb+” 读写打开一个二进制文件,允许读和写“wb+” 读写打开或建立一个二进制文件,允许读和写“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据注意:对于文本文件的操作,我们可以“r”,“w”,“a”,“a+”不需要加字母t也可以的2.以打开文本文件的操作来说明如果我们所要创建的文件已经存在,不同的方式会有不同的效果:A: 用fopen("file.txt","a+")a+ 以附加方式打开可读写的文件。

若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

B:用fopen(”test.txt”,”w+”)//test.txt为你要打开的文件名,“w+”表示假如文件不存在则会创建,假如文件存在则会替代3.下面详细总结下:字符串含义"r" 以只读方式打开文本文件"w" 以只写方式打开文本文件,已存在的将被覆盖"a" 以只写方式打开文本,指针指向文件尾,原文件保留"+" 与上面的字符串组合,表以读写方式打开(还有这个)"b" 与上面的字符串组合,表打开二进制文件说明:纯属个人整理,如有雷同,纯属巧合,希望对大家有所帮助哈!!!。

C语言读写文件两种方式ASCII和二进制。

C语言读写文件两种方式ASCII和二进制。

C语⾔读写⽂件两种⽅式ASCII和⼆进制。

C语⾔读写⽂件有两种⽅式ASCII 和⼆进制。

现在举例说明:内存中的字符或字符串都是⽂本模式(unicode编码存储,统⼀长度,定长码,⽅便)内存中的其他变量都是以⼆进制编码存储程序的代码以⽂本模式ASCII码⽅式存储1.在windows系统中,⽂本模式下,⽂件以" \r\n"代表换⾏。

若以⽂本模式打开⽂件,并⽤fputs等函数写⼊换⾏符"\n"时,函数会⾃动在"\n"前⾯加上"\r"。

即实际写⼊⽂件的是"\r\n" 。

读取的时候⾃动去掉\r,将\n写⼊内存。

2.在类Unix/Linux系统中⽂本模式下,⽂件以"\n"代表换⾏。

所以Linux系统中在⽂本模式和⼆进制模式下并⽆区别。

注:Windows 采⽤ \r\n 是有原因的,Windows 采⽤了传统的英⽂打字机的模式。

想想看英⽂打字机是如何换⾏的呢?英⽂打字机是选择将⼩车退回⾄起点,这个过程称为回车(carriage return, CR),随后把⼩车调⾄下⼀⾏的位置,这个过程称为换⾏(line feed, LF),这样就完成了英⽂打字机中换⾏过程。

回车(CR)在计算机中使⽤ ASCII 为 13 的字符来表⽰,换⾏(LF)使⽤ASCII 为 10 的字符来表⽰。

这也就是 Windows 的换⾏采⽤ \r\n 来表⽰的原因。

3.当⽤⼆进制模式读取windows下代表换⾏的\r\n时,不能⾃动去掉\r,这样读⼊内存的数据多了⼀个‘\r’,造成跟在‘\r’后⾯的⼆进制位右移,读取必然会出错!4.如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据作相应的转换。

5.⽤⽂本模式写⽂件,读取时也要⽤⽂本模式,⼆进制模式同样。

C语言实现二进制文件读写

C语言实现二进制文件读写

C语言实现二进制文件读写C语言中,实现二进制文件的读写主要借助于文件指针和文件操作函数。

二进制文件的读写相对于文本文件的读写要更复杂一些,因为二进制文件中存储的是字节流,而不是可见字符。

一、二进制文件的写入二进制文件的写入可以通过以下步骤实现:1. 打开文件:通过`fopen`函数以二进制写入模式打开文件,返回一个文件指针。

例如,`FILE *fp = fopen("data.bin", "wb");`即可打开名为"data.bin"的二进制文件。

2. 写入数据:通过`fwrite`函数向文件中写入数据。

该函数的参数包括待写入数据的存储地址、每个数据项的大小和待写入数据的数量。

例如,`int data[] = {1, 2, 3, 4, 5}; fwrite(data, sizeof(int), 5, fp);`即可将整型数组data的数据写入文件中。

3. 关闭文件:通过`fclose`函数关闭已打开的文件。

例如,`fclose(fp);`即可关闭文件指针fp所指向的文件。

二、二进制文件的读取二进制文件的读取可以通过以下步骤实现:1. 打开文件:通过`fopen`函数以二进制读取模式打开文件,返回一个文件指针。

例如,`FILE *fp = fopen("data.bin", "rb");`即可打开名为"data.bin"的二进制文件。

2. 读取数据:通过`fread`函数从文件中读取数据。

该函数的参数包括待存储数据的地址、每个数据项的大小和待读取数据的数量。

例如,`int data[5]; fread(data, sizeof(int), 5, fp);`即可将文件中的数据读入整型数组data中。

3. 关闭文件:通过`fclose`函数关闭已打开的文件。

例如,`fclose(fp);`即可关闭文件指针fp所指向的文件。

c语言中文件的存取方式

c语言中文件的存取方式

c语言中文件的存取方式
在C语言中,可以使用文件存取函数来读写文件。

文件的存取方
式主要有以下两种:
1. 文本文件存取:文本文件是以字符为单位存储的文件,可以
使用标准输入输出函数来读写文本文件,比如fread、fwrite、fscanf、fprintf等函数。

2. 二进制文件存取:二进制文件是以字节为单位存储的文件,
可以使用二进制输入输出函数来读写二进制文件,比如fread、fwrite 等函数。

文件存储的步骤大致如下:
1. 打开文件:使用文件指针指向要打开的文件,可以使用fopen 函数来打开文件。

2. 读写文件:使用适当的函数来读写文件,读写文件的方式取
决于文件的类型。

3. 关闭文件:当读写操作完成后,需要使用fclose函数关闭文件。

在C语言中,文件通常分为文本文件和二进制文件两种类型。


本文件是以文本形式存储的文件,可以使用文件输入输出函数进行读
写操作,这些函数以字符为单位进行操作。

二进制文件是以二进制格
式存储的文件,可以使用二进制输入输出函数读写操作,这些函数以
字节为单位进行操作。

fopen函数的各种打开方式 -回复

fopen函数的各种打开方式 -回复

fopen函数的各种打开方式-回复题目:fopen函数的各种打开方式详解引言:在C语言编程中,我们常常需要对文件进行读取或写入操作。

而要操作文件,就需要首先打开文件。

C语言提供了fopen函数用于打开文件,并返回一个指向该文件的指针。

fopen函数有多种打开方式,本文将一步一步详细解析各种打开方式及其应用场景。

一、打开方式的基本概念在C语言中,打开方式指定了文件操作的基本特性,用于告诉计算机以何种方式操作文件。

常见的打开方式有:只读模式("r")、只写模式("w")、追加模式("a")等。

下面我们将一一介绍。

二、只读模式只读模式指示打开文件时只进行读取操作,不允许写入。

即文件内容不可修改。

只读模式的打开方式为"r"。

例如,使用只读模式打开一个名为“example.txt”的文件:cFILE* fp = fopen("example.txt", "r");只读模式适用于需要读取文件内容,而不需要修改文件的场景。

三、只写模式只写模式指示打开文件时只进行写入操作,不允许读取。

即只能写入新文件,不能修改已有文件内容,如果文件已存在,将会被清空。

只写模式的打开方式为"w"。

例如,使用只写模式打开一个名为“example.txt”的文件:cFILE* fp = fopen("example.txt", "w");只写模式适用于需要创建新文件或者清空已有文件,然后进行写入操作的场景。

四、追加模式追加模式指示打开文件时只进行写入操作,不允许读取。

与只写模式不同的是,追加模式不会清空已有文件内容,而是将新写入的内容追加到文件末尾。

追加模式的打开方式为"a"。

例如,使用追加模式打开一个名为“example.txt”的文件:FILE* fp = fopen("example.txt", "a");追加模式适用于需要在已有文件基础上追加新内容的场景,经常用于日志文件的写入操作。

c语言中fopen的用法

c语言中fopen的用法

c语言中fopen的用法在C语言中,fopen也是一个打开文件的函数。

在C语言的命令窗口中输入doc fopen或者help fopen就可以获得该函数的帮助信息。

下面小编就跟你们详细介绍下c语言中fopen的用法,希望对你们有用。

c语言中fopen的用法如下:fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,“文件指针名”必须是被说明为FILE 类型的指针变量;“文件名”被打开文件的文件名,是字符串常量或字符串数组,要求是全路径;“使用文件方式”是指文件的类型和操作要求。

文件使用方式意义:“rt”只读打开一个文本文件,只允许读数据“wt”只写打开或建立一个文本文件,只允许写数据“at”追加打开一个文本文件,并在文件末尾写数据“rb”只读打开一个二进制文件,只允许读数据“wb”只写打开或建立一个二进制文件,只允许写数据“ab”追加打开一个二进制文件,并在文件末尾写数据“rt+”读写打开一个文本文件,允许读和写“wt+”读写打开或建立一个文本文件,允许读写“at+”读写打开一个文本文件,允许读,或在文件末追加数据“rb+”读写打开一个二进制文件,允许读和写“wb+”读写打开或建立一个二进制文件,允许读和写“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据对于文件使用方式有以下几点说明:1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:r(read): 读w(write): 写a(append): 追加t(text): 文本文件,可省略不写b(banary): 二进制文件+: 读和写2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

3) 用“w”打开的文件只能向该文件写入。

若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删除,重新创建一个新文件。

4) 若要向一个已存在的文件追加新的信息,只能用"a"方式打开文件。

c语言的各种读写模式

c语言的各种读写模式

c语言的各种读写模式C语言的各种读写模式一、以只读模式打开文件在C语言中,可以通过以只读模式打开文件来读取文件的内容。

只读模式不允许对文件进行写操作,可以保证文件的内容不会被意外修改。

使用只读模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "r");if (file == NULL) {printf("无法打开文件\n");return 1;}// 读取文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以只读模式打开名为`file.txt`的文件。

如果文件打开失败,即文件不存在或无法访问,则会输出错误信息并返回。

如果文件成功打开,则可以在之后的代码中读取文件的内容。

二、以写入模式打开文件与只读模式相反,以写入模式打开文件允许对文件进行写操作。

使用写入模式打开文件时,如果文件不存在,则会创建一个新的文件;如果文件已存在,则会清空文件内容。

使用写入模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "w");if (file == NULL) {printf("无法打开文件\n");return 1;}// 写入文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以写入模式打开名为`file.txt`的文件。

如果文件打开失败,则会输出错误信息并返回。

如果文件成功打开,则可以在之后的代码中写入文件的内容。

三、以追加模式打开文件追加模式是一种特殊的写入模式,它不会清空文件内容,而是在文件末尾继续写入新的内容。

使用追加模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "a");if (file == NULL) {printf("无法打开文件\n");return 1;}// 写入文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以追加模式打开名为`file.txt`的文件。

C语言中文件打开模式(rwar+w+a+rbwbabrb+wb+ab+)浅析

C语言中文件打开模式(rwar+w+a+rbwbabrb+wb+ab+)浅析

C语⾔中⽂件打开模式(rwar+w+a+rbwbabrb+wb+ab+)浅析C语⾔⽂件打开模式浅析在C语⾔的⽂件操作语法中,打开⽂件⽂件有以下12种模式,如下图:打开模式只可以读只可以写读写兼备⽂本模式r w a r+w+a+⼆进制模式rb wb ab rb+ (r+b) wb+ (w+b) ab+ (a+b)其中,⼆进制模式与⽂本模式操作相似,只不过是以⼆进制流的形式读写⽽已,下⾯以⽂本模式为例分析:1."r" 模式:1.1 打开⽂件进⾏“只读”操作,即只能从⽂件读取内容。

1.2 若欲操作的⽂件不存在,则打开失败。

1.3 成功打开⽂件时,⽂件指针位于⽂件开头。

1.4 打开⽂件后,不会清空⽂件内原有内容。

1.5 可从⽂件中任意位置读取内容。

2."w" 模式:2.1 打开⽂件进⾏“只写”操作,即只能向⽂件写⼊内容。

2.2 若欲操作的⽂件不存在,则新建⽂件。

2.3 成功打开⽂件时,⽂件指针位于⽂件开头。

2.4 打开⽂件后,会清空⽂件内原有的内容。

2.5 可向⽂件中任意位置写⼊内容,且进⾏写⼊操作时,会覆盖原有位置的内容。

3."a" 模式:3.1 打开⽂件进⾏“追加”操作,即只能向⽂件写⼊内容。

3.2 若欲操作的⽂件不存在,则新建⽂件。

3.3 成功打开⽂件时,⽂件指针位于⽂件结尾。

3.4 打开⽂件后,不会清空⽂件内原有内容。

3.5 只能向⽂件末尾追加(写)内容。

4."r+"模式:4.1 打开⽂件进⾏“读写”操作,即既可读取,⼜可写⼊。

4.2 若欲操作的⽂件不存在,则打开失败。

4.3 成功打开⽂件时,⽂件指针位于⽂件开头。

4.4 打开⽂件后,不会清空⽂件内原有内容。

4.5 ⽆论是读取内容还是写⼊内容,都可在⽂件中任意位置进⾏,且进⾏写⼊操作时,会覆盖原有位置的内容。

5."w+"模式:5.1 打开⽂件进⾏“读写”操作,即既可读取,⼜可写⼊。

C语言采用文本方式和二进制方式打开文件的区别分析

C语言采用文本方式和二进制方式打开文件的区别分析

C语⾔采⽤⽂本⽅式和⼆进制⽅式打开⽂件的区别分析稍微了解C程序设计的⼈都知道,⽂本⽂件和⼆进制⽂件在计算机上⾯都是以0,1存储的,那么两者怎么还存在差别呢?对于编程⼈员来说,⽂本⽂件和⼆进制⽂件就是⼀个声明,指明了你应该以什么⽅式(⽂本⽅式/⼆进制)打开这个⽂件,⽤什么函数读写这个⽂件(读写函数),怎么判断读到这个⽂件结尾等。

具体分析如下:⼀、以哪种⽅式打开⼀个⽂件:ANSI C规定了标准输⼊输出函数库,⽤ fopen()函数打开⽂件。

fopen()函数的调⽤⽅式⼀般为:FILE *fp;fp=fopen(⽂件名,使⽤⽂件⽅式);使⽤⽂件⽅式见下表:使⽤⽂件⽅式含义"r"(只读)为输⼊打开⼀个⽂本⽂件"w"(只写)为输出打开⼀个⽂本⽂件"a"(追加)为追加打开⼀个⽂本⽂件"rb"(只读)为输⼊打开⼀个⼆进制⽂件"wb"(只写)为输出打开⼀个⼆进制⽂件"ab"(追加)为追加打开⼀个⼆进制⽂件"r+"(读写)为读/写打开⼀个⽂本⽂件"w+"(读写)为读/写创建⼀个⽂本⽂件"a+"(读写)为读/写打开⼀个⽂本⽂件"rb+"(读写)为读/写打开⼀个⼆进制⽂件"wb+"(读写)为读/写创建⼀个⼆进制⽂件"ab+"(读写)为读/写打开⼀个⼆进制⽂件同⼀个⽂件从磁盘读取⽂件到内存(程序数据区或者缓存区)时,两种⽅式下,内存中的内容⼀般不相同,这就是两种打开⽅式的实质性差别。

这⾥要说⼀个背景,那就是在windows下,它会做⼀个处理,就是写⽂件时,换⾏符会被转换成回车,换⾏符存在磁盘⽂件上,⽽读磁盘上的⽂件时,它⼜会进⾏逆处理,就是把⽂件中连续的回车,换⾏符转换成换⾏符。

因此,在读取⼀个磁盘⽂件时,⽂本⽅式读取到⽂件内容很有可能会⽐⼆进制⽂件短,因为⽂本⽅式读取要把回车,换⾏两个字符变成⼀个字符,相当于截短了⽂件。

c语言获取文件内容的二进制格式

c语言获取文件内容的二进制格式

《深度解析:C语言中获取文件内容的二进制格式的方法》在C语言编程中,获取文件内容的二进制格式是非常重要的一部分。

在本文中,我将会以从简到繁、由浅入深的方式来探讨这一主题,以便读者能更深入地理解。

1. 什么是二进制格式?让我们来简要地了解一下什么是二进制格式。

二进制格式是指以二进制形式存储的数据格式,它是由0和1组成的。

在计算机中,所有的数据最终都会以二进制格式来表示和存储。

了解如何获取文件内容的二进制格式就显得尤为重要了。

2. 使用C语言获取文件内容的二进制格式在C语言中,有多种方法可以获取文件内容的二进制格式。

这其中最常见的方法就是使用标准库函数来操作文件。

你可以使用fopen()函数打开文件,然后使用fread()函数来读取文件的内容。

通过这种方式,你可以逐个字节地读取文件内容,从而获取到文件的二进制格式。

3. 深入理解二进制格式的获取方法然而,仅仅使用fread()函数来读取文件内容可能并不够深入。

在实际的编程中,我们可能会遇到更为复杂的情况,比如需要跳过特定长度的数据、需要按照特定的格式读取数据等。

这时,我们就需要更深入地理解如何使用C语言来获取文件内容的二进制格式了。

4. 个人观点和理解对于我个人来说,掌握如何获取文件内容的二进制格式对于C语言编程来说是非常重要的。

在实际的项目开发中,我们经常会遇到需要读取和处理二进制文件的情况,比如读取图片文件、音频文件等。

如果不能深入理解如何获取文件内容的二进制格式,就很难完成这些任务。

5. 总结和回顾了解如何在C语言中获取文件内容的二进制格式是非常重要的。

通过本文的介绍,我希望读者能够更全面、深刻和灵活地理解这一主题。

在实际的编程中,要根据具体的需求和情况来选择合适的方法来获取文件的二进制格式,这样才能更好地处理文件操作的需求。

以上是关于C语言获取文件内容的二进制格式的深度解析,希望对你有所帮助。

(文章内容总字数大于3000字)6. 获取文件二进制格式的进阶方法除了使用标准库函数外,还可以使用C语言中的一些高级库来获取文件的二进制格式。

c语言fopen打开二进制文件并运算示例

c语言fopen打开二进制文件并运算示例

c语言fopen打开二进制文件并运算示例以C语言fopen打开二进制文件并运算示例在C语言中,我们可以使用fopen函数来打开文件。

而对于二进制文件的处理,我们可以通过指定打开模式为"rb"来实现。

本文将以一个示例来演示如何使用fopen打开二进制文件,并进行简单的运算。

让我们创建一个名为"numbers.bin"的二进制文件,并将一些整数写入该文件中。

我们可以使用以下代码来实现:```c#include <stdio.h>int main() {// 创建一个二进制文件FILE *file = fopen("numbers.bin", "wb");if (file == NULL) {printf("无法创建文件!\n");return 1;}// 写入整数到文件int numbers[] = {10, 20, 30, 40, 50};fwrite(numbers, sizeof(int), sizeof(numbers) / sizeof(int), file);// 关闭文件fclose(file);return 0;}```在上述代码中,我们首先使用fopen函数以二进制写入模式("wb")打开一个名为"numbers.bin"的文件。

然后,我们使用fwrite函数将整数数组"numbers"写入文件中。

最后,我们使用fclose函数关闭文件。

接下来,我们将使用fopen以二进制读取模式("rb")打开该文件,并进行一些简单的运算。

我们可以使用以下代码来实现:```c#include <stdio.h>int main() {// 打开二进制文件FILE *file = fopen("numbers.bin", "rb");if (file == NULL) {printf("无法打开文件!\n");return 1;}// 读取整数数组int numbers[5];fread(numbers, sizeof(int), sizeof(numbers) / sizeof(int), file);// 进行运算int sum = 0;for (int i = 0; i < sizeof(numbers) / sizeof(int); i++) {sum += numbers[i];}printf("数组中的整数之和为:%d\n", sum);// 关闭文件fclose(file);return 0;}```在上述代码中,我们首先使用fopen函数以二进制读取模式("rb")打开"numbers.bin"文件。

c语言二进制文件读取写入

c语言二进制文件读取写入

c语言二进制文件读取写入C语言可以用文件读写函数来读取和写入二进制文件。

在这里,我们讲解一下如何使用这些函数。

首先,我们需要打开一个二进制文件。

可以使用fopen函数来打开文件,需要指定文件名和打开方式,"rb"代表以二进制方式读取文件。

例如:```cFILE *fp;fp = fopen("file.bin", "rb");```这将打开名为file.bin的二进制文件,并返回一个文件指针。

如果文件不存在,将返回NULL。

读取文件时可以使用fread函数。

该函数需要指定读取的元素个数、每个元素的大小、要读取的文件指针和要写入的缓冲区。

例如,我们可以读取10个整数到一个整型数组中:```cint buffer[10];fread(buffer, sizeof(int), 10, fp);```在写入二进制文件时,我们可以使用fwrite函数。

该函数需要指定写入的元素个数、每个元素的大小、要写入的缓冲区和要写入的文件指针。

例如,我们可以写入一个整数数组到二进制文件中:```cint buffer[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};fwrite(buffer, sizeof(int), 10, fp);```完成读取和写入操作后,需要关闭文件。

可以使用fclose函数来关闭文件指针。

例如:```cfclose(fp);```总之,使用C语言进行二进制文件的读写可以使用fopen、fread、fwrite和fclose等函数。

这些函数非常有用且灵活,可以满足各种读写需求。

c++文件读写

c++文件读写
ifstream fin("input.txt"); 现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.
int number;
float real;
char letter, word[8];
方法peek() 返回文件中的下一个字符, 但并不实际读取它。所以如果你用peek() 查看下一个字符, 用get() 在peek()之后读取,会得到同一个字符, 然后移动文件计数器。
方法putback(char) 输入字符, 一次一个, 到流中。我没有见到过它的使用,但这个函数确实存在。
写文件
fin.getline(sentence, 100); 这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前,数组允许接受的最大元素数量. 现在我们得到了想要的结果:“This is really awesome!”。
你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休,因为二进制文件还在等着我们。
二进制文件最好的地方是可以在一行把一个结构写入文件。 如果说,你的结构有12个不同的成员。 用ASCII?文件,你不得不每次一条的写入所有成员。 但二进制文件替你做好了。 看这个。
struct OBJECT { int number; char letter; } obj;
obj.number = 15;
int num = 150;
char name[] = "John Doe";

CC++读写文本文件、二进制文件的方法

CC++读写文本文件、二进制文件的方法

CC++读写⽂本⽂件、⼆进制⽂件的⽅法⼀:⽬的掌握C语⾔⽂本⽂件读写⽅式;掌握C语⾔⼆进制⽂件读写⽅式;掌握CPP⽂本⽂件读写⽅式;掌握CPP⼆进制⽂件读写⽅式;⼆:C语⾔⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤C模式对Txt进⾏写出void TxtWrite_Cmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtFILE * fid = fopen("txt_out.txt","w");if(fid == NULL){printf("写出⽂件失败!\n");return;}for(int i = 0; i < 50; i ++ ){fprintf(fid,"%03d\t%4.6lf\t%4.6lf\n",index[i],x_pos[i],y_pos[i]);}fclose(fid);}2. ⽂本⽂件读取//采⽤C模式对Txt进⾏读取void TxtRead_Cmode(){FILE * fid = fopen("txt_out.txt","r");if(fid == NULL){printf("打开%s失败","txt_out.txt");return;}vector<int> index;vector<double> x_pos;vector<double> y_pos;int mode = 1;printf("mode为1,按字符读⼊并输出;mode为2,按⾏读⼊输出;mode为3,知道数据格式,按⾏读⼊并输出\n");scanf("%d",&mode);if(mode == 1){//按字符读⼊并直接输出char ch; //读取的字符,判断准则为ch不等于结束符EOF(end of file)while(EOF!=(ch= fgetc(fid)))printf("%c", ch);}else if(mode == 2){char line[1024];memset(line,0,1024);while(!feof(fid)){fgets(line,1024,fid);printf("%s\n", line); //输出}}else if(mode == 3){//知道数据格式,按⾏读⼊并存储输出int index_tmp;double x_tmp, y_tmp;while(!feof(fid)){fscanf(fid,"%d%lf%lf\n",&index_tmp, &x_tmp, &y_tmp);index.push_back(index_tmp);x_pos.push_back(x_tmp);y_pos.push_back(y_tmp);}for(int i = 0; i < index.size(); i++)printf("%04d\t%4.8lf\t%4.8lf\n",index[i], x_pos[i], y_pos[i]);}fclose(fid);}三:C语⾔⼆进制⽂件读写1. ⼆进制⽂件写⼊//采⽤C模式写⼆进制⽂件void DataWrite_CMode(){//准备数据double pos[200];for(int i = 0; i < 200; i ++ )pos[i] = i ;//写出数据FILE *fid;fid = fopen("binary.dat","wb");if(fid == NULL){printf("写出⽂件出错");return;}int mode = 1;printf("mode为1,逐个写⼊;mode为2,逐⾏写⼊\n");scanf("%d",&mode);if(1==mode){for(int i = 0; i < 200; i++)fwrite(&pos[i],sizeof(double),1,fid);}else if(2 == mode){fwrite(pos, sizeof(double), 200, fid);}fclose(fid);}2.⼆进制⽂件读取//采⽤C模式读⼆进制⽂件void DataRead_CMode(){FILE *fid;fid = fopen("binary.dat","rb");if(fid == NULL){printf("读取⽂件出错");return;}int mode = 1;printf("mode为1,知道pos有多少个;mode为2,不知道pos有多少个\n"); scanf("%d",&mode);if(1 == mode){double pos[200];fread(pos,sizeof(double),200,fid);for(int i = 0; i < 200; i++)printf("%lf\n", pos[i]);free(pos);}else if(2 == mode){//获取⽂件⼤⼩fseek (fid , 0 , SEEK_END);long lSize = ftell (fid);rewind (fid);//开辟存储空间int num = lSize/sizeof(double);double *pos = (double*) malloc (sizeof(double)*num);if (pos == NULL){printf("开辟空间出错");return;}fread(pos,sizeof(double),num,fid);for(int i = 0; i < num; i++)printf("%lf\n", pos[i]);free(pos); //释放内存}fclose(fid);}四:C++⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤CPP模式写txtvoid TxtWrite_CPPmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtfstream f("txt_out.txt", ios::out);if(f.bad()){cout << "打开⽂件出错" << endl;return;}for(int i = 0; i < 50; i++)f << setw(5) << index[i] << "\t" << setw(10) << x_pos[i] <<"\t" <<setw(10)<< y_pos[i] << endl;f.close();}2.⽂本⽂件读取//采⽤CPP模式读取txtvoid TextRead_CPPmode(){fstream f;f.open("txt_out.txt",ios::in);//⽂件打开⽅式选项:// ios::in = 0x01, //供读,⽂件不存在则创建(ifstream默认的打开⽅式)// ios::out = 0x02, //供写,⽂件不存在则创建,若⽂件已存在则清空原内容(ofstream默认的打开⽅式)// ios::ate = 0x04, //⽂件打开时,指针在⽂件最后。

C语言实现读写二进制文件

C语言实现读写二进制文件

C语言实现读写二进制文件C语言提供了各种函数来读写二进制文件。

二进制文件是一种以二进制形式存储数据的文件,与文本文件相比,二进制文件不以字符为单位,而是以字节为单位存储数据。

读写二进制文件可以用于处理图片、音频、视频等非文本类型的文件。

要读写二进制文件,首先需要打开文件。

使用`fopen`函数可以打开一个文件,语法为:```cFILE* fopen(const char *filename, const char *mode);```其中,`filename`是要打开的文件名,`mode`是打开文件的模式,常用的模式有:- `"rb"`:以二进制模式打开一个已有的文件,用于读取。

- `"wb"`:以二进制模式打开一个文件,如果文件存在则截断为空文件,如果文件不存在则创建新文件,用于写入。

- `"ab"`:以二进制模式打开一个文件追加数据,如果文件不存在则创建新文件。

`fopen`函数返回一个指向`FILE`类型的指针,该指针表示已打开文件的文件流。

示例:```c#include <stdio.h>int maiFILE *file = fopen("data.bin", "rb");if (file == NULL)printf("无法打开文件\n");return 1;}//在这里进行读写操作fclose(file); // 关闭文件return 0;```使用`fwrite`函数可以将数据以二进制形式写入文件,语法为:```csize_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);```其中,`ptr`是指向要写入数据的指针,`size`是每个数据项的大小,`count`是要写入的数据项数目,`stream`是要写入的文件流。

C语言中文本文件与二进制文件的区别

C语言中文本文件与二进制文件的区别

C语言中文本文件与二进制文件的区别作者:志盟文本文件和二进制文件的本质区别文件可以分为两类:二进制文件和文本(字符)文件,从物理上讲二进制文件和字符文件没有区别,都是以二进制的形式保存在磁盘上。

但是它们在文件的组织形式上不一样,二进制文件有文件头(File Header),用以表明文件的大小、类型等信息,程序在处理二进制文件时一般会先分析文件头,判断文件是否合法,也就是说,文件头后面的数据才是程序真正要处理的;字符文件没有文件头,第一个字节就是要显示的内容。

拿BMP 文件举例,其头部的长度较为固定,前2字节用来记录文件为BMP 格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录BMP 文件头的长度。

文本文件是基于字符编码的,常见的编码方式有ASCII、UNICODE、UTF-8 等;指定编码方式后,每个字节(也可以是每两个、三个字节)所表示的字符是一样的,任何程序都可以正确读取。

二进制文件是自定义编码的,也就是说,你可以根据具体程序指定每个字节(或者每两个、三个字节)代表什么意思。

例如,A 程序是图像编辑器,指定01001111 代表红色,B 程序是视频播放器,它把01001111 理解为快进,显然是不对的。

所以,字符文件是通用的,任何程序只要按照对应的编码方式打开都可以正确显示,二进制文件只有特定的程序才能处理。

文本文件和二进制文件都可以在屏幕上显屏,但是二进制文件的内容无法读懂,大部分是乱码。

fopen中的文本文件和二进制文件在C语言中,二进制方式很简单,读文件时,会原封不动的读出文件的全部內容,写的時候,也是把內存缓冲区的內容原封不动的写到文件中。

而对文本文件的处理就不一样了。

Windows 和DOS 下的文本文件以CRLF(0X0D 0X0A) 作为换行符,而C语言本身以LF(0X0A)作为换行符,所以文本方式写入数据时,会将LF(0X0A)替换为CRLF(0X0D 0X0A),而读取数据时又会替换回来。

c二进制文件读写结构体

c二进制文件读写结构体

C二进制文件读写结构体1.概述在C语言中,我们可以通过二进制文件读写操作,实现对结构体的存储和读取。

本文将介绍如何使用C语言进行二进制文件的读写操作,并结合结构体的定义与使用来实现数据的存储和读取。

2.二进制文件读写2.1文件的打开与关闭在进行二进制文件读写操作之前,首先需要打开文件以便进行读写操作,并在操作结束后关闭文件。

通过`fop e n`函数可以打开一个文件,并指定打开方式,常见的打开方式有`"rb"`(读取二进制文件)和`"wb"`(写入二进制文件)等。

F I LE*f p;f p=f op en("da ta.bi n","r b");i f(f p==N UL L){p r in tf("文件打开失败!\n");r e tu rn-1;}...f c lo se(f p);2.2结构体的定义与使用结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的数据类型,方便操作和管理。

在进行二进制文件读写操作时,我们通常会使用结构体来存储和读取数据。

s t ru ct St ud en t{c h ar na me[20];i n ta ge;f l oa ts co re;};2.3二进制文件的写入在进行二进制文件的写入操作时,我们需要先创建一个结构体对象,并将数据存储到结构体中,然后使用`fwr i te`函数将结构体数据写入到文件中。

s t ru ct St ud en ts tu;s t rc py(s tu.n am e,"张三");s t u.ag e=18;s t u.sc or e=90.5;f w ri te(&st u,si zeo f(s tr uc tS tu de nt),1,fp);2.4二进制文件的读取在进行二进制文件的读取操作时,我们首先需要创建一个结构体对象,然后使用`f re ad`函数从文件中读取数据,并将数据存储到结构体中。

C++基础系列——文件操作

C++基础系列——文件操作

C++基础系列——⽂件操作⼀、C++⽂件类及⽤法C++ 标准库提供了 3 个类⽤于实现⽂件操作,它们统称为⽂件流类,这 3 个类分别为:ifstream:专⽤于从⽂件读取数据ofstream:专⽤于向⽂件写⼊数据fstream:可读可写这三个⽂件流类都位于 fstream 头⽂件中fstream 类拥有 istream、ostream 类的全部成员⽅法。

fstream 头⽂件中并没有定义可直接使⽤的 fstream、ifstream 和 ofstream 类对象fstream 类常⽤成员⽅法成员⽅法名适⽤类对象功能open()fstream打开指定⽂件,使其与⽂件流对象关联is_open()ifstream检查指定⽂件是否已打开。

close()ofstream关闭⽂件,切断和⽂件流对象的关联。

swap()ofstream交换 2 个⽂件流对象。

operator>>(i)fstream重载 >> 运算符,⽤于从指定⽂件中读取数据。

gcount()(i)fstream返回上次从⽂件流提取出的字符个数。

该函数常和 get()、getline()、ignore()、 peek()、read()、readsome()、putback() 和 unget() 联⽤。

get()(i)fstream从⽂件流中读取⼀个字符,同时该字符会从输⼊流中消失。

getline(str,n,ch)(i)fstream从⽂件流中接收 n-1 个字符给 str 变量,当遇到指定 ch 字符时会停⽌读取,默认情况下 ch 为 '\0'。

ignore(n,ch)(i)fstream从⽂件流中逐个提取字符,但提取出的字符被忽略,不被使⽤,直⾄提取出 n 个字符,或者当前读取的字符为 ch。

peek()(i)fstream返回⽂件流中的第⼀个字符,但并不是提取该字符。

putback(c)(i)fstream将字符 c 置⼊⽂件流(缓冲区)。

fopen中b的作用

fopen中b的作用

fopen中b的作用在C语言中,fopen()函数用于打开文件。

它是一个非常常用的函数,可以用来读取和写入文件。

fopen()函数有两个参数,文件名和模式。

fopen()函数的模式参数是用来指定文件的打开方式的。

其中,模式参数中的b 标识了以二进制方式打开文件。

那么,fopen中b的作用是什么呢?下面将详细介绍这个问题。

在C语言中,文件可以分为文本文件和二进制文件。

文本文件是以字符为单位进行读写的,而二进制文件则是以字节为单位进行读写的。

fopen()函数中的b参数表示以二进制方式打开文件,也就是说,当文件被以b模式打开时,文件将被视为二进制文件。

以二进制方式打开文件的主要作用是用于处理二进制数据,例如图像、音频、视频等非文本文件。

对于这些二进制文件来说,每个字节都是十分重要的,因此必须以二进制方式对其进行读写。

使用fopen()函数打开二进制文件可以使用以下语法:```cFILE *fptr;fptr = fopen("filename", "rb");```这里,"rb"表示以只读方式打开二进制文件。

如果需要以写入方式打开二进制文件,可以使用"wb"参数。

其他一些常用的参数包括"ab"(追加方式打开二进制文件)、"rb+"(以读写方式打开二进制文件)等。

打开二进制文件后,可以使用fread()函数来读取文件内容,并使用fwrite()函数写入内容。

这两个函数都可以处理二进制数据。

需要注意的是,在不同的操作系统中,文件的换行符可能有所不同。

在以文本方式打开文件时,会根据操作系统自动将换行符进行转换。

而以二进制方式打开文件则不会进行任何转换操作。

总而言之,fopen中b的作用是以二进制方式打开文件,用于读写二进制数据。

它允许直接读取和写入二进制文件,而不会对文件内容进行字符编码转换,从而保持数据的完整性和准确性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C打开文件文本方式二进制方式
2009年11月01日星期日 22:53
Windows平台下
如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"\r\n"转换成"\n";当写入文件的时候,系统会将"\n"转换成"\r\n"写入。

如果以"二进制"方式打开文件,则读/写都不会进行这样的转换。

在Unix/Linux平台下,“文本”与“二进制”模式没有区别。

数据有字符型和非字符型(数)两种。

按文本方式写文件指的是将数据转换为对应的字符型数据之后再写入文件。

对于字符型数据,由于其本身就是ASCII码字符,一般不必转换,直接写入文件。

但是,由于不同的系统对于换行符('\n')有不同的处理(转换)方式,在有的系统(如Windows)下也会对 '\n' 作适当的转换。

对于非字符型数据,都要进行转换处理。

例如:int m = 12; 以及 double f = 2.3;,分别按照 "%d"、"%lf" 方式将 m 和 f 写入文件的时候,写入的分别是 '1'、'2' 两个字符以及 '2'、'.'、'3' 等三个字符的ASCII码值。

显然,如果按照二进制方式写的话,在文件中一般 m 要占 4 个字节、f 要占 8 个字节。

一、文本文件与二进制文件的定义
大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。

这两者只是在编码层次上有差异。

简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。

二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如
UTF-8),基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。

而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。

大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。

大家可以看出来了吧,其编码是基于值的(不定长的,2、4、8字节长的值都有),所以BMP是二进制文件。

二、文本文件与二进制文件的存取
文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流(前面已经说了,存储都是二进制的),然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。

一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。

例如对于这么一个文件流"01000000_01000001_01000010_01000011"(下划线''_'',是我为了增强可读性,而手动添加的),第一个8比特''01000000''按ASCII码来解码的
话,所对应的字符是字符''A'',同理其它3个8比特可分别解码为''BCD'',即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。

事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。

人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。

但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。

用记事本打开二进制文件与上面的情况类似。

记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。

例如文件流
''00000000_00000000_00000000_00000001''可能在二
进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了"NULL_NULL_NULL_SOH"这四个控制符。

文本文件的存储与其读取基本上是个逆过程,不再累述。

而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已,也不再叙述。

三、文本文件与二进制文件的优缺点
因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。

一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。

关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.
很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将''\n'',换成''\r\n'',所以文件读写时,操作系统需要一个一个字符的检查
当前字符是不是''\n''或''\r\n'').这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来(如Linux系统和Windows系统共享文本文件)。

四、C的文本读写和二进制读写
应该说C的文本读写与二进制的读写是一个编程层次上的问题,与具体的操作系统有关,所以"用文本方式读写的文件一定是文本文件,用二进制读写的文件一定是二进制文件"这类观点是错误的.下面的讲述非明确指出操作系统类型,都暗指windows.
C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个''\n''(0AH换行符),它将其换成''\r\n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''\r\n''将其反变化为
''\n'',然后送到读缓冲区.正因为文本方式有''\n''--''\r\n''之间的转换,其存在转换耗时.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入
文件.
总地来说,从编程的角度来说,C中文本或二进制读写都是缓冲区与文件中二进制流的交互,只是文本读写时有回车换行的转换.所以当写缓冲区中无换行符''\n''(0AH),文本写与二进制写的结果是一样的,同理,当文件中不存在
''\r\n''(0DH0AH)时,文本读与二进制读的结果一样.
五、实例
5678的存储形式为:ASCII
码:00110101 00110110 00110111 00111000 (四个字节)5678的存储形式为:二进制:00010110 00101110 (两个字节)二进制文件和文本文件的唯一差异就是前者含有一些非标准输出的ASCII码。

0x01就是非标准输出的ASCII码,0x61就是标准输出的ASCII码。

)。

相关文档
最新文档