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

看板C_and_CPP作者 (why so serious)時間14年前 (2011/11/03 23:10), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): fwrite執行過後就確定有寫入硬碟 餵入的資料(Input): 一個影片檔 預期的正確結果(Expected Output): 複製完整的影片檔到指定目錄 錯誤結果(Wrong Output): 整個複製的過程完成以後看到的檔案大小本來是正確的 但是實際上打開影片的時候會發現並沒有完整寫入 程式碼(Code):(請善用置底文網頁, 記得排版) FILE *fsrc; FILE *fdst; char buffer[128000]; fsrc=fopen("路徑", rb); fdst=fopen("路徑", wb); int temp; temp=fread(buffer, 1, 128000, fsrc); while(temp>0) { fwrite(buffer, 1, 128000, fsrc); temp=fread(buffer, 1, 128000, fdst); } fclose(fsrc); fclose(fdst); 流程大概是這樣吧 補充說明(Supplement): 這個程式是要指定寫入USB隨身碟或隨身硬碟的 以同樣達到300MB的檔案來說 寫入速度比較慢得USB隨身碟可以完整寫入 但是寫入速度比較快的隨身硬碟則無法完整寫入 操作過程其實是在複製完以後就會拔除隨身碟 但是立即拔除會發生寫入不完整,等個數十秒則可以完整寫入 有找過一些資料說因為fwrite是會先寫到buffer 不過有試過fflush依舊無法正常寫入 用setvbuff設定不使用buffer也無法正常寫入 另外還有看到要同步的fsync fdatasync則沒有例子可以參考 不知道實際上要怎麼用 有辦法在fwrite執行完以後就確實寫入硬碟的方式嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.156.164

11/03 23:15, , 1F
在 OS 把外接硬碟的寫入快取關掉, 或拔除前先從OS移除?
11/03 23:15, 1F

11/03 23:15, , 2F
右下角工作列的"安全的移除此裝置..." 先按再拔試試看
11/03 23:15, 2F
文章代碼(AID): #1EigxNiB (C_and_CPP)
文章代碼(AID): #1EigxNiB (C_and_CPP)