2011-09-22 108 views
1

我想讀取我的c#代碼中的exe文件,然後解碼爲base64。在c#中讀取exe文件作爲二進制文件

我正在做這樣的

FileStream fr = new FileStream(@"c:\1.exe", FileMode.Open, FileAccess.Read, FileShare.Read); 
StreamReader sr = new StreamReader(fr); 
fr.Read(data, 0, count); 

但問題是,當我寫這個文件的書面文件被損壞。 在十六進制代碼分析中的代碼值20十六進制正在被替換爲0.

現在好心地建議解決方案。感謝

+0

可能的編碼問題 – meziantou

+1

就注意到:你爲什麼要創建一個StreamReader,然後從來沒有使用它? – cHao

回答

7

StreamReader應該只用於文本文件。二進制文件,你需要直接使用一個FileStream或:

byte[] buffer = File.ReadAllBytes(@"c:\1.exe"); 
string base64Encoded = Convert.ToBase64String(buffer); 
// TODO: do something with the bas64 encoded string 

buffer = Convert.FromBase64String(base64Encoded); 
File.WriteAllBytes(@"c:\2.exe", buffer); 
+0

真相被告知,如果你要讀取和/或寫入一個EXE,幾乎總是把它當作一堆字節來處理。 Base64編碼會產生比解決問題更多的問題 - 字符串變得幾乎不透明,您必須進行一些轉換和棘手的位移以獲取數據。 – cHao

+0

@cHao,完全同意你的看法。這只是OP的意圖不明確。他談到了Base64字符串,所以我只展示了一個例子。 –

3

StreamReader的官方文檔:

「實現一個TextReader的,從特定編碼字節流中讀取字符。」

這是用於文本,而不是二進制文件。試試Stream或BinaryReader ..(你爲什麼試用StreamReader?)