python中文本文件和二进制文件的区别_c++ 以二进制和以文本方式读写文件的区别...

在c++项目开发中,时常涉及到文件读写操作。因此在这里先简单梳理和回顾一下文本模式和二进制模式在进行文件读写上的区别。

1.linux平台下文本文件和二进制文件的读写

在linux平台下进行文件读写时,文本模式和二进制模式没有区别。在文件读写时,调用fopen,无论以文本模式还是二进制模式打开文件,之后在进行文件读取和写入,其结果都是一样的。因此,在linux平台下,以二进制方式创建的文件和写入的文件,在以后的访问中,使用二进制或者文本方式均可以进行正确的读写;同理,以文本方式创建的文件和写入的文件,使用二进制或者文本模式均可以进行正确的读写。请看一下例子:

1.1 以二进制模式打开并写入文件

//例子1:以二进制模式打开并写入文件

#include

#include

using namespace std;

int main()

{

int m=;

char s[] = "中国\n";

FILE *fp = fopen("testBin.txt","wb"); //二进制模式

if(NULL == fp )

{

return -;

}

int successCont=fwrite(&m,sizeof(int),,fp);

if(successCont!=)

cout<

fwrite(s,sizeof(char),sizeof(s),fp);

fprintf(fp,"%d",m); //格式化输出

fclose(fp);

return ;

}

查看testBin.txt的数据,如下:

其中: 0061 0000为m的值97(我的计算机是小端序,文件的默认编码是utf-8), b8e4 e5ad bd9b为汉字中国对应的utf-8编码,0a为\n字符,3739 为字符7和9对应的ASCII值。

1.2 以文本模式打开并写入文件

修改1.1节中的第9行代码为FILE *fp = fopen("testTxt.txt","w"); //文本模式。然后重新运行程序,查看testTxt.txt文件,结果如下:

可以发现,以文本模式打开并写入文件的结果和通过二进制模式写入文件的结果一致。

2.windows平台下文本文件和二进制文件的读写

下面,简单对比一下windows平台上以文本模式和二进制模式进行文件读写的差异。

2.1 以文本模式打开并写入文件

如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"/r/n"转换成"/n";当写入文件的时候,系统会将"/n"转换成"/r/n"写入。请看以下示例:

#include

#include

using namespace std;

int main()

{

int m = ;

char s[] = "中国\n";

FILE *fp = NULL;

fopen_s(&fp,"winTxt.txt", "w");

if (NULL == fp)

{

return -;

}

int successCont = fwrite(&m, sizeof(int), , fp);

if (successCont != )

cout << "error" << std::endl;

fwrite(s, sizeof(char), sizeof(s), fp);

fprintf(fp, "%d", m);

fclose(fp);

return ;

}

winTxt.txt结果如下:

对比linux平台可以发现,\n(0x0a)前果然多了一个字符\r(0x0d)。

2.2 以二进制模式打开并写入文件

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

把2.1节中的第9行代码改为:fopen_s(&fp,"winBin.txt", "wb");运行,查看winBin.txt,结果如下:

因此,在windos平台下开发中,以二进制模式创建并写入的文件,在读取时,为了防止读文件出错,建议以二进制模式进行读取;同样的道理,以文本模式创建并写入的文件,在读取该文件时,建议以文本模式进行读取。

C&sol;C&plus;&plus;中二进制与文本方式打开文件的区别

二进制与文本文件主要有两个大的区别: 1.换行符的区别: Windows平台下  对于Windows文本文件,它们使用回车和换行来表示换行符:如果以“文本”方式打开文件,当读取文件的时候,系统会将所有 ...

C语言中以文本方式读写文件时换行符转换的注意事项

我们知道在UNIX下是没有回车符(\r)的,只有换行符(\n),而C语言诞生于UNIX(Linux即面向开源的UNIX,Mac OS也是UNIX发展而来的,而Windows是从MS-DOS发展而来,与 ...

《用格式化&lpar;fprintf和fscanf函数&rpar;的方式读写文件》

//用格式化(fprintf和fscanf函数)的方式读写文件 [用格式化的方式向文件中写入数据]#include#include int ...

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

稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...

Windows读写文件的猫腻

这里主要涉及对于回车换行的讨论. 回车:\r 换行:\n Windows读写文件分为普通文件读写和二进制文件读写. 如果以二进制的方式读写文件(如rb, wb),将会完全的把文件内容读出来,不做任何处 ...

计算机程序的思维逻辑 &lpar;60&rpar; - 随机读写文件及其应用 - 实现一个简单的KV数据库

57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

Java编程的逻辑 &lpar;60&rpar; - 随机读写文件及其应用 - 实现一个简单的KV数据库

本系列文章经补充和完善,已修订整理成书,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

背水一战 Windows 10 &lpar;89&rpar; - 文件系统&colon; 读写文本数据&comma; 读写二进制数据&comma; 读写流数据

[源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...

随机推荐

java WEB开发入门

WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

RSS阅读器python实现概述

这边简单说一下最近倒腾的RSS阅读器的小东东,RSS阅读器估计很多人用过或者自己动手实现过.首先wudagang0123多年前提供的一个示例:http://bbs.chinaunix.net/foru ...

关于python函数的学习记录

1.默认参数必须指向不变对象! 2. extra = {'city': 'Beijing', 'job': 'Engineer'}注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函 ...

I帧 B帧 p帧 IDR帧的区别

转自:http://blog.csdn.net/sphone89/article/details/8086071 IDR(Instantaneous Decoding Refresh)--即时解码刷新 ...

bash if 表达式

.bash把[[ $a -lt $b ]]看作一个单独的元素,并且返回一个退出码.退出码0为真,非零为假 例如: a= b=c [[ $a -lt $b ]] echo $? # a小于b为真 [[ ...

vs code 使用git

1.下载git https://git-scm.com/ 2. git 全局设置 git config --global user.name "xxxx" git config - ...

python PIL模块学习

PIL PIL:Python Imaging Library.对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础. PIL安装 安装推荐别人的吧, ...

HTML DOCTYPE 的重要性

定义和用法 声明必须是 HTML 文档的第一行,位于 标签之前. 声明不是 HTML 标签:它是指示 we ...

WebSocket原理与实践&lpar;四&rpar;--生成数据帧

WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...

Git 子模块:git submodule

imtianx 2018年03月08日阅读 2057 Git 子模块:git submodule 工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景.比如,在项目中引用第三方库.或者 ...

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

weixin_39977136

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值