以二进制和文本模式编写的文件的区别

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.

这篇关于以二进制和文本模式编写的文件的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Algorithm to convert RGB to HSV and HSV to RGB in range 0-255 for both(将 RGB 转换为 HSV 并将 HSV 转换为 RGB 的算法,范围为 0-255)
How to convert an enum type variable to a string?(如何将枚举类型变量转换为字符串?)
When to use inline function and when not to use it?(什么时候使用内联函数,什么时候不使用?)
Examples of good gotos in C or C++(C 或 C++ 中好的 goto 示例)
Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);(ios_base::sync_with_stdio(false) 的意义;cin.tie(NULL);)
Is TCHAR still relevant?(TCHAR 仍然相关吗?)