gpt4 book ai didi

c# - 写入文件只能在 "step in" Debug模式下工作吗?

转载 作者:行者123 更新时间:2023-12-03 11:52:46 26 4
gpt4 key购买 nike

大家好,我有一个关于我试图创建的“FTP”应用程序的问题。我在 C# 中构建了一个客户端,在 C 中构建了我的服务器。对于我的客户端,我使用的是 Visual Studio 2015。当我使用“step-in/step-out” Debug模式功能时,我的代码可以完美执行。当客户端尝试下载文件时会出现此问题。服务器发送文件的全部内容,客户端接收所有这些内容,但由于某种原因,只有大约 70% 的文件被写入 FileStream。

我的代码如下:

public void download(string baseCom,string downloadPlace)
{
//baseCom is the main command
//downloadPlace is location to download file from including name

sendCommand(baseCom);
FileStream myStream = File.Create(downloadPlace);
int bytesRead = 0;
byte[] myByte = new byte[1024];
do
{
bytesRead = ourSock.Receive(myByte, myByte.Length, 0);
myStream.Write(myByte, 0, bytesRead);



} while ((bytesRead > 0) && (bytesRead == 1024)) ;


myStream.Flush();
myStream.Close();
}

我是 C# 和网络编程的新手,所以我感谢你们的帮助。我的一部分人认为,以某种方式定期运行程序时,套接字流中的某些数据可能仍然是“遗留”的。

最佳答案

((bytesRead > 0) && (bytesRead == 1024))

似乎是这里的问题。

请求 1024 字节的读取操作并不能保证您将获得 1024 字节。

您可以获得 0 到 1024 之间的任意字节数(0 表示传输结束),在这种情况下,(假设读取缓冲区只有 768 字节)您只需停止读取。

因此,如果在接收到一半文件时发生这种情况(全部读取 1024 字节),您将没有剩余的一半并保存到目前为止获取的内容。

请将其更改为:
while (bytesRead > 0);

关于c# - 写入文件只能在 "step in" Debug模式下工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61175767/

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