Re: [問題] 確定fwrite有寫入到USB外接硬碟

看板C_and_CPP作者 (why so serious)時間14年前 (2011/11/04 11:59), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串3/3 (看更多)
read write那邊是筆誤....... 不過又試了一下,如果用安全地移除硬體再拔除USB是可以正確寫入的 我這裡的拔除就是真的把USB拔掉不是任何其他的移除方式.......... 這裡的要求是使用者在檔案複製完成後可以直接拔除USB.......... 不過又不行我直接用API去移除(搞不好使用者不想移除 囧) 所以我是想說判斷USB是否還在讀寫來決定是否複製檔案完成 不過找不到怎麼做啊 囧 WM_DEVICECHANGE好像沒這種message(也可能是我英文理解力太差....) 或是有什麼其他的方式可以判斷USB是否在讀寫中嗎? 補充一下 我把write的大小改成read到的大小一樣寫入不完全 : : 補充說明(Supplement): : : 這個程式是要指定寫入USB隨身碟或隨身硬碟的 : : 以同樣達到300MB的檔案來說 : : 寫入速度比較慢得USB隨身碟可以完整寫入 : : 但是寫入速度比較快的隨身硬碟則無法完整寫入 : : 操作過程其實是在複製完以後就會拔除隨身碟 : : 但是立即拔除會發生寫入不完整,等個數十秒則可以完整寫入 : 你有試過等個二、三分鐘後,就會完整寫入嗎? : 如果試過 waiting,且可以完整寫入話,下面的廢話就不用看了。 : 我認為不怎麼可能發生這情形,在 Windows 作業系統裡面, : 用較柔性方式移除 USB (如右下角的硬體移除方式), : 在該 disk 還有檔案進行讀寫時,應不可能移除成功的。 : 只要確定不是以硬體方式 (如以程式語言控制 USB power) 控制 on/off, : 結果應不致於到不可預測。 : : 有找過一些資料說因為fwrite是會先寫到buffer : : 不過有試過fflush依舊無法正常寫入 : : 用setvbuff設定不使用buffer也無法正常寫入 : : 另外還有看到要同步的fsync fdatasync則沒有例子可以參考 : : 不知道實際上要怎麼用 : : 有辦法在fwrite執行完以後就確實寫入硬碟的方式嗎? : 若真有這問題存在,我會追的應是用了什麼 API 去移除裝置, : 還有那隻 API 有沒有 return value 。 : (因基本假設是在於,還在寫的話是不會移除成功的) : 若是 MFC / Win32 的話還蠻好解決的, : http://msdn.microsoft.com/en-us/library/windows/desktop/ : aa363480%28v=vs.85%29.aspx : http://msdn.microsoft.com/en-us/library/windows/desktop/ : aa363215%28v=vs.85%29.aspx : 這兩篇看完應該就差不多了,一點小意見,參考。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.121.117 ※ 編輯: CRAZYFAN 來自: 60.250.121.117 (11/04 12:00)

11/04 15:13, , 1F
我猜是cache... 不過因為原文推文就有寫了XD
11/04 15:13, 1F

11/04 22:15, , 2F
.....你有必要折磨你的電腦和USB儲存裝置嗎...
11/04 22:15, 2F

11/04 23:42, , 3F
有試過在Windows裡設定可移除裝置為"快速移除最佳化"嗎?
11/04 23:42, 3F

11/04 23:43, , 4F
印象中如果寫入可移除裝置時, 有資料還被OS/filesystem
11/04 23:43, 4F

11/04 23:43, , 5F
cache住, 你copy完檔案進去不乖乖按移除直接拔都可能造
11/04 23:43, 5F

11/04 23:44, , 6F
成檔案寫入不完全; 這樣自己用程式寫自然也是如此吧@_@"
11/04 23:44, 6F
文章代碼(AID): #1EisCgPZ (C_and_CPP)
文章代碼(AID): #1EisCgPZ (C_and_CPP)