2

Program.cs私はC#でファイルを操作する方法を学んでいて、ファイルに他のステートメントを加えて書きたかったのです。しかし、私は私に言うエラーを受け取りましたThrowBytesOverFlow

ここに画像の説明を入力してください

書きたいものはすべて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();
4

1 に答える 1

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();

ただし、using ブロック内で例外がスローされた場合でも、ファイルは閉じられます。

于 2013-01-31T14:33:09.633 に答える