gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:01:05 24 4
gpt4 key购买 nike

实际上,我正在通过套接字复制一个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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com