2012-10-27 106 views
1

其實我正在複製套接字的exe文件。我可以使用StreamWriter類複製文本,但我使用相同的代碼來複制exe文件,它創建了一個具有所需名稱的exe文件,但我無法運行它。 「這個應用程序無法在您的電腦上運行」。我有Windows 8 x64,這是無關緊要的。如何使用StreamWriter使用C#代碼編寫.exe文件?

static void Main(string[] args) 
{ 
    TcpClient tcpclient = new TcpClient(); 
    tcpclient.Connect("localhost", 20209); 
    NetworkStream stm = tcpclient.GetStream(); 

    byte[] buffer = new byte[1024]; 
    var fs = File.Open("F:/aki/RMI/akshay.exe", FileMode.OpenOrCreate, FileAccess.ReadWrite); 
    var streamWriter = new StreamWriter(fs); 
    int x; 
    while ((x=stm.Read(buffer, 0, 1024))>0) 
    { 
     **A** streamWriter.Write(buffer); 
     **B** //streamWriter.Write(Encoding.ASCII.GetString(buffer, 0, buffer.Length)); 
    } 
    streamWriter.Close(); 
    fs.Close(); 

    Thread.Sleep(2000); 
    Console.WriteLine("Waiting"); 
    //Console.ReadLine(); 
    tcpclient.Close(); 
} 

我試過A和B兩種方法,B適用於文本文件,但不適用於exe文件。任何解決方案

或者我必須使用任何其他作家類的exe文件?

回答

2

您需要在StreamWriter類中使用Write(byte[], index, count)方法來做到這一點,但這不存在。調用streamWriter(buffer)streamWriter(buffer.ToString())相同,這樣就不會寫入緩衝區的內容,並且使用將緩衝區中的二進制內容轉換爲文本會改變它。

根本不要使用StreamWriter。寫FileStream代替:

while ((x = stm.Read(buffer, 0, 1024)) > 0) { 
    fs.Write(buffer, 0, x); 
} 

您應該使用變量x的長度來寫,而不是buffer.Length,作爲緩衝可能並不總是完全充滿。至少最後一個塊幾乎不會是一個完整的緩衝區。

0

StreamWriter是一個TextWriter。難道你不能這樣做:

fs.Write(buffer, 0, buffer.Length); 
相關問題