2013-01-13 71 views
2

我正在學習使用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(); 
+2

什麼是實際的錯誤信息? – SLaks

+3

字節和字符有不同的長度。使用'Encoding.UTF8.GetString(bytes)' – SLaks

+2

ThrowBytesOverflow聽起來像是StackOverflow的競爭對手網站。這不是一個.NET異常。 –

回答

1

我不知道你是否故意在字節和編碼級別工作,以便了解更多關於它們的信息。如果是這樣,那麼這個答案不會有幫助。但是,下面的代碼應該做你的目標爲:「使用」的聲明,如果你不熟悉它,會自動關閉,我們寫程序時獲取到年底文件

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

該塊。它相當於寫入:

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

除了如果在使用塊內引發異常,那麼文件仍然會關閉。