在C#中,如何在不更改原始编码的情况下将文本字符串预先挂起到文件中

时间:2010-02-08 19:46:14

标签: c# streamwriter

我想在C#中预先挂起(到开头)带有字符串的文件。 目前,我只是用我的字符串和原始内容替换文件的内容。 我不想这样做,因为编写者会搞乱编码字符。

有没有办法预先挂起文本文件而不更改它的原始编码(每个字符)。

必须有办法。

4 个答案:

答案 0 :(得分:1)

只需读取文件而无需解码字节。而且你必须为你的标题选择一个编码 - 在你的情况下,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);
}

请注意,代码直接在流上运行,不使用TextReaderTextWriter(这是StreamReaderStreamWriter的抽象基类。如果您必须处理复杂的任务,然后只是读取和编写数组,则可以使用BinaryReaderBinaryWriter来简化对流的访问。

答案 1 :(得分:1)

Text encoding is a funny thing。如果您正在编写将被解释为编码字符的代码,则必须告知编译器(或者它可能会假设)字节应该如何排列以表示特定字符​​。如果您的程序不知道您将使用的文件的编码,那么您打算如何向编译器指示它应该如何解释该文件中的字节数组?

如果您不知道如何指示编译器解释这些字节,您可以考虑将字符作为字节的流而不是字符的流读取(即你不知道在运行时将使用什么编码。在这种情况下,您必须希望您选择附加到文件开头的任何基本字符都可以在任何编码中被普遍识别;这是因为您要将字节而非字符附加到文件的开头。

答案 2 :(得分:0)

this page底部的代码似乎让您读取文件,保留编码,然后使用相同的编码将其写回。你应该可以修改它来做你需要的。

答案 3 :(得分:0)

我找到了这个让我得到正确的文件编码: http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17

然后我可以在编写器中使用该编码。

使用安全吗?