我在 Notepad++ 中打开了一个文件,它看起来像附加的图像。这些符号代表什么?十六进制/ASCII/二进制?我想读写一个单独的文件。我使用 StreamReader 和 StreamWriter 并逐个字符地读写,但生成的文件具有与输入文件不同的符号。
由于文件很大,我想使用流。
我在 Notepad++ 中打开了一个文件,它看起来像附加的图像。这些符号代表什么?十六进制/ASCII/二进制?我想读写一个单独的文件。我使用 StreamReader 和 StreamWriter 并逐个字符地读写,但生成的文件具有与输入文件不同的符号。
由于文件很大,我想使用流。
如果您只想复制确切的二进制数据,而不关心它是否是文本,您应该使用Stream
. 例如:
using (var input = Stream.OpenRead(inputFile))
using (var output = Stream.OpenWrite(outputFile))
{
input.CopyTo(output);
}
当您使用 时StreamWriter
,您将数据解释为特定编码中的文本数据 - 如果它不是文本,或者它不在该编码中,那么您最终会得到垃圾,基本上。
这是二进制数据,它可能意味着任何东西。在不知不觉中,它只是一系列字节,其中一个字节是一个 8 位数字。它可以表示为字符(以任意数量的编码)、十六进制数字甚至是穿孔卡片。
如果你想读/写二进制数据,那么 FileStream 是你的朋友。StreamReader/Writer 是面向字符的。在过去只有 ASCII 编码时,字符曾经等同于字节,但现在不再是这种情况了。见http://www.joelonsoftware.com/articles/Unicode.html