抛出Bytes OverFlow

时间:2013-01-13 17:10:32

标签: c#

我正在学习使用C#中的文件,我想将Program.cs加上另一个语句写入文件。 但我收到一条错误,告诉我ThrowBytesOverFlow

enter image description here

我认为我必须将我要写的所有内容转换为char数组,然后将其编码为bytes

我不知道如何解决这个问题!

FileStream afile = new FileStream(@"..\..\Program.cs", FileMode.Open, FileAccess.Read);
        byte[] byteData = new byte[afile.Length];
        char[] charData = new char[afile.Length];
        afile.Seek(0, SeekOrigin.Begin);
        afile.Read(byteData, 0, (int)afile.Length);
        Decoder d = Encoding.UTF8.GetDecoder();
        d.GetChars(byteData, 0, byteData.Length, charData, 0);
        Console.WriteLine(charData);
        afile.Close();

        byte[] bdata;
        char[] cdata;
        FileStream stream = new FileStream(@"..\..\My file.txt", FileMode.Create);
        cdata = "Testing Text!\n".ToCharArray();
        bdata = new byte[cdata.Length];            
        Encoder e = Encoding.UTF8.GetEncoder();
        e.GetBytes(cdata, 0,cdata.Length, bdata, 0, true);
        stream.Seek(0, SeekOrigin.Begin);
        stream.Write(bdata, 0, bdata.Length);

        byte[] bydata = new byte[charData.Length];
        e.GetBytes(charData, 0, charData.Length, bydata, 0, true);
        stream.Write(bydata, 0, bydata.Length);
        stream.Close();

1 个答案:

答案 0 :(得分:1)

我不知道您是否故意在字节和编码级别工作以了解有关它们的更多信息。如果是这样,那么这个答案将没有用。但是,以下代码应该按照您的目标执行:

string contents = File.ReadAllText(@"..\..\Program.cs");
using (StreamWriter file = new StreamWriter(@"..\..\My file.txt"))
{
    file.WriteLine("Testing Text!");
    file.Write(contents);
}

如果你不熟悉它,“using”语句会在程序到达块结束时自动关闭我们写入的文件。它等同于写作:

StreamWriter file = new StreamWriter(@"..\..\My file.txt"))
file.WriteLine("Testing Text!");
file.Write(contents);
file.Close();

除了如果在使用块内抛出异常,那么该文件仍然会被关闭。