簡體   English   中英

寫入文件僅在“步入”調試模式下工作?

[英]Writing to file works in “step in” debug mode only?

大家好,我對我正在嘗試創建的“FTP”應用程序有疑問。 我在 C# 中構建了一個客戶端,在 C 中構建了我的服務器。 對於我的客戶,我使用的是 Visual Studio 2015。當我使用“步入/步出”調試模式功能時,我的代碼可以完美執行。 當客戶端嘗試下載文件時會出現此問題。 服務器發送文件的全部內容,客戶端接收所有這些內容,但由於某種原因,只有大約 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM