How to write an .exe file using C# code with StreamWriter?

六眼飞鱼酱① 提交于 2021-01-28 18:44:51

问题


Actually I am copying an exe file over sockets. I am able to copy a text using StreamWriter Class but i used the same code for copying a exe file , it created a exe file with the desired name but I cannot run it. "This app cannot run on your PC". I have Windows 8 x64, that is irrelevant.

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

I tried both A and B methods, B works for text file but not for an exe file. Any solutions?

Or I have to use any other Writer Class for exe files ?


回答1:


You would need a Write(byte[], index, count) method in the StreamWriter class to do that, but that doesn't exist. Calling streamWriter(buffer) is the same as streamWriter(buffer.ToString()), so that won't write the contents of the buffer, and using Encoding.ASCII to convert the binary content in the buffer to text will change it.

Don't use a StreamWriter at all. Write to the FileStream instead:

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

You should use the variable x as the length to write rather than buffer.Length, as the buffer might not always be completely filled. At least the last block will almost never be a full buffer.




回答2:


A StreamWriter is a TextWriter. Can't you just do:

fs.Write(buffer, 0, buffer.Length);


来源:https://stackoverflow.com/questions/13101967/how-to-write-an-exe-file-using-c-sharp-code-with-streamwriter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!