[問題] 確定fwrite有寫入到USB外接硬碟
開發平台(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
11/03 23:15, 1F
→
11/03 23:15, , 2F
11/03 23:15, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):