我想在 C# 中预先(在开头)一个带有字符串的文件。目前,我只是用我的字符串加上原始内容替换文件的内容。 我不想这样做,因为 streamwriter 会弄乱编码字符。
有没有办法预先挂起一个文本文件而不改变它的原始编码(每个字符)。
一定有办法的。
我想在 C# 中预先(在开头)一个带有字符串的文件。目前,我只是用我的字符串加上原始内容替换文件的内容。 我不想这样做,因为 streamwriter 会弄乱编码字符。
有没有办法预先挂起一个文本文件而不改变它的原始编码(每个字符)。
一定有办法的。
只需读取文件而无需解码字节。而且您必须为您的标头选择一种编码 - 在您的情况下,ASCII 似乎是最安全的选择。
const String fileName = "test.file";
const String header = "MyHeader";
var headerBytes = Encoding.ASCII.GetBytes(header);
var fileContent = File.ReadAllBytes(fileName);
using (var stream = File.OpenWrite(fileName))
{
stream.Write(headerBytes, 0, headerBytes.Length);
stream.Write(fileContent, 0, fileContent.Length);
}
请注意,代码直接对流进行操作,不使用TextReader
or (这是andTextWriter
的抽象基类)。如果您必须处理比读取和写入数组更复杂的任务,您可以使用and来简化对流的访问。StreamReader
StreamWriter
BinaryReader
BinaryWriter
文本编码是一件有趣的事情。如果您正在编写将被解释为编码字符的代码,则必须告诉编译器(或者它可能会假设)应该如何安排字节来表示特定字符。如果您的程序不知道您将使用的文件的编码,那么您打算如何向编译器指示它应该如何解释该文件中的字节数组?
如果您不知道如何指示编译器解释这些字节(即您不知道在运行时将使用什么编码),您可以考虑将字符读取为字节流而不是字符流。在这种情况下,您必须希望您选择附加到文件开头的任何基本字符都可以在任何编码中被普遍识别;这是因为您将在文件开头附加字节而不是字符。
此页面底部的代码似乎可以让您读入文件,保留编码,然后使用相同的编码将其写回。你应该能够修改它来做你需要的。
我发现这让我得到正确的文件编码: http ://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17
然后我可以在流写入器中使用该编码。
使用安全吗?