Difference between files written in binary and text mode(以二进制和文本模式编写的文件的区别)
问题描述
写入以文本模式打开但在二进制模式下没有发生的文件时会发生什么转换?特别是在 MS Visual C 中.
What translation occurs when writing to a file that was opened in text mode that does not occur in binary mode? Specifically in MS Visual C.
unsigned char buffer[256];
for (int i = 0; i < 256; i++) buffer[i]=i;
int size = 1;
int count = 256;
二进制模式:
FILE *fp_binary = fopen(filename, "wb");
fwrite(buffer, size, count, fp_binary);
与文本模式:
FILE *fp_text = fopen(filename, "wt");
fwrite(buffer, size, count, fp_text);
推荐答案
我相信大多数平台在处理流时都会忽略t"选项或text-mode"选项.然而,在 Windows 上,情况并非如此.如果您查看以下 fopen() 函数的说明:MSDN,你会看到指定"t"选项会有如下效果:
I believe that most platforms will ignore the "t" option or the "text-mode" option when dealing with streams. On windows, however, this is not the case. If you take a look at the description of the fopen() function at: MSDN, you will see that specifying the "t" option will have the following effect:
- 换行符 (' ') 将在输出时转换为 ' " 序列
- 回车/换行序列将在输入时转换为换行.
- 如果文件以追加模式打开,将检查文件末尾是否有 ctrl-z 字符(字符 26),并在可能的情况下删除该字符.它还将将该字符的存在解释为文件结尾.这是从 CPM 时代(关于父母的罪孽一直延续到他们的孩子直到第三代或第四代)的不幸遗留.与先前陈述的意见相反,不会附加 ctrl-z 字符.
- line feeds (' ') will be translated to ' " sequences on output
- carriage return/line feed sequences will be translated to line feeds on input.
- If the file is opened in append mode, the end of the file will be examined for a ctrl-z character (character 26) and that character removed, if possible. It will also interpret the presence of that character as being the end of file. This is an unfortunate holdover from the days of CPM (something about the sins of the parents being visited upon their children up to the 3rd or 4th generation). Contrary to previously stated opinion, the ctrl-z character will not be appended.
这篇关于以二进制和文本模式编写的文件的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:以二进制和文本模式编写的文件的区别


基础教程推荐
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++,'if' 表达式中的变量声明 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01