2012-10-27 3 views
1

사실 소켓을 통해 exe 파일을 복사하고 있습니다. 내가 StreamWriter 클래스를 사용하여 텍스트를 복사 할 수 있지만 같은 코드를 exe 파일을 복사하는 데 사용, 그것은 원하는 이름으로 exe 파일을 만들었지 만 그것을 실행할 수 없습니다. "이 앱을 PC에서 실행할 수 없습니다." 나는 윈도우 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 파일 용으로 다른 Writer 클래스를 사용해야합니까?

답변

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

당신은 버퍼가 항상 완전히 충전되지 않을 수 있습니다로, buffer.Length보다는 쓸 길이로 변수 x를 사용해야합니다. 최소한 마지막 블록은 거의 완전한 버퍼가 될 수 없습니다.

0

StreamWriter는 TextWriter입니다. 그냥 할 수 없습니까?

fs.Write(buffer, 0, buffer.Length); 
관련 문제