c# - 如何使用C#代码和StreamWriter编写.exe文件?

标签 c# sockets streamwriter

实际上,我正在通过套接字复制一个exe文件。我可以使用StreamWriter类复制文本,但是我使用相同的代码复制exe文件,它使用所需名称创建了一个exe文件,但我无法运行它。
“此应用程序无法在您的PC上运行”。我有Windows 8 x64,这是无关紧要的。

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类?

最佳答案

您需要在Write(byte[], index, count)类中使用StreamWriter方法来执行此操作,但这并不存在。调用streamWriter(buffer)streamWriter(buffer.ToString())相同,因此不会写入缓冲区的内容,而使用Encoding.ASCII将缓冲区中的二进制内容转换为文本将对其进行更改。

完全不要使用StreamWriter。改为写入FileStream:

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

您应该使用变量x作为写入的长度,而不是buffer.Length,因为缓冲区可能并不总是被完全填充。至少最后一个块几乎永远不会是一个完整的缓冲区。

关于c# - 如何使用C#代码和StreamWriter编写.exe文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101967/

相关文章:

c# - 三元(条件)运算符与返回 Action 的 if 语句之间的区别

python - 在 nginx 上使用 Django 设置套接字

node.js - 通过 Cloudflare 为 socket.io 提供 HTTPS

c# - 如何从服务器读取消息? (TCP)

c# - StreamWriter 似乎没有做任何事情?

c# - 为什么 C# 类在默认情况下是非虚拟的,而默认情况下它们的方法是非虚拟的?

javascript - 如何在 C# 代码中使用 javaScript 库

c# - WCF - 每次调用对象缓存

C++ 套接字。 const char* 正确到达,string.c_str() doenst

c# - 调用 Stream.Write 和使用 StreamWriter 有什么区别?