[英]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.