写入以文本模式打开但在二进制模式下不会发生的文件时会发生什么转换?特别是在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);
Jon Trauntve.. 49
我相信大多数平台在处理流时都会忽略"t"选项或"text-mode"选项.然而,在Windows上,情况并非如此.如果您在MSDN上查看fopen()函数的描述,您将看到指定"t"选项将产生以下效果:
换行符('\n')将在输出中转换为'\ r \n"序列
回车/换行序列将在输入时转换为换行符.
如果在追加模式下打开文件,将检查文件的末尾是否有ctrl-z字符(字符26)并删除该字符(如果可能).它还会将该字符的存在解释为文件的结尾.从CPM时代开始,这是一个令人遗憾的延续(关于他们的孩子一直到第3代或第4代的父母的罪行).与先前声明的观点相反,不会追加ctrl-z字符.
回车实际上是'\ r','\n'是换行符. (12认同)
MrZebra.. 28
在文本模式下,换行符"\n"可以转换为回车+换行符"\ r \n"
通常你想要以二进制模式打开.尝试在文本模式下读取任何二进制数据将无法正常工作,它将被破坏.您可以在二进制模式下读取文本正常 - 它不会自动将"\n"翻译为"\ r \n".
见fopen
我相信大多数平台在处理流时都会忽略"t"选项或"text-mode"选项.然而,在Windows上,情况并非如此.如果您在MSDN上查看fopen()函数的描述,您将看到指定"t"选项将产生以下效果:
换行符('\n')将在输出中转换为'\ r \n"序列
回车/换行序列将在输入时转换为换行符.
如果在追加模式下打开文件,将检查文件的末尾是否有ctrl-z字符(字符26)并删除该字符(如果可能).它还会将该字符的存在解释为文件的结尾.从CPM时代开始,这是一个令人遗憾的延续(关于他们的孩子一直到第3代或第4代的父母的罪行).与先前声明的观点相反,不会追加ctrl-z字符.
在文本模式下,换行符"\n"可以转换为回车+换行符"\ r \n"
通常你想要以二进制模式打开.尝试在文本模式下读取任何二进制数据将无法正常工作,它将被破坏.您可以在二进制模式下读取文本正常 - 它不会自动将"\n"翻译为"\ r \n".
见fopen
此外,当您使用"rt"打开文件时,输入将在Crtl-Z字符上终止.