2017-10-04 71 views
-1

如果我從文件中讀取字節數組,並使用下面的代碼字節數組不同

byte[] bytes = File.ReadAllBytes(filePath); 

    File.WriteAllBytes(filePath, byteArr); 

作品完美fine.I可以打開並查看它寫正確寫入文件。

但是,如果我讀文件內容到一個字符串,然後使用以下函數

string s = File.ReadAllText(filePath); 
    var byteArr = System.Text.Encoding.UTF8.GetBytes(s); 

字節陣列的尺寸是大於先前的陣列直接從文件中讀取其轉換爲字節陣列和值也不同,因此,如果我寫使用此陣列打開

注意當不能讀取該文件: -文件是UTF-8編碼 我發現,使用以下代碼

using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, true)) 
     { 
      reader.Peek(); // you need this! 
      var encoding = reader.CurrentEncoding; 
     } 

無法理解爲什麼兩個陣列不同?

我是使用下面的附加的圖像轉換,然後寫

image

+2

你在這裏期待什麼?在圖像文件上使用ReadAlltext()沒有任何意義。 –

+0

需要保存文件可能是任何圖像或文本.. –

+0

我是uisng filestream來保存文件數據,並且需要在需要時檢索文件 –

回答

2

隨着

using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, true)) 
{ 
    reader.Peek(); // you need this! 
    var encoding = reader.CurrentEncoding; 
} 

var encoding只會呼應Encoding.UTF8參數。你在那裏欺騙你自己。

二進制文件只是沒有文本編碼。


需要保存文件可能是任何圖像或文本

就用ReadAllBytes/WriteAllBytes。文本文件始終也是byte[],但並非所有文件類型都是文本。您需要首先使用Base64編碼,並且只是增加了大小。

1

將字節數組轉換爲字符串最安全的方法的確將其編碼爲base64之類的東西。 Like:

string s = Convert.ToBase64String(bytes);

byte [] bytes = Convert.FromBase64String(s);

相關問題