写入文件仅在 "step in" 调试模式下有效?

Writing to file works in "step in" debug mode only?

大家好,我有一个关于我尝试创建的 "FTP" 应用程序的问题。我在 C# 中构建了一个客户端,在 C 中构建了我的服务器。对于我的客户端,我使用 visual studio 2015。当我使用 "step-in/step-out" 调试模式功能时,我的代码执行完美。当客户端尝试下载文件时会出现问题。服务器发送文件的全部内容,客户端接收所有这些内容,但由于某种原因,只有大约 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# 和网络编程的新手,所以非常感谢大家的帮助。我的一部分相信,当 运行 程序定期时,某些数据可能会 "left-over" 保留在套接字流中。

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

似乎是这里的问题。

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

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

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

请改为:

while (bytesRead > 0);