[問題] WriteFile() +FILE_FLAG_NO_BUFFERING

看板C_and_CPP作者 (software everywhere)時間15年前 (2010/12/16 02:16), 編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/1
平台 windows 問題: WriteFile 使用 FILE_FLAG_NO_BUFFERING flag, 依據MSDN說明 buffer必須對齊 sector size的倍數(512 bytes) 沒有對齊的話 會收到 invalid parameter的error. 經過test WriteFile buffer 長度不是 512的倍數會報錯 (GetLastError() return ERROR_INVALID_PARAMETER ) so 這樣就發生一個很有趣的狀況 我用 no buffer的方式 write file, 可以連續寫一大堆 512bytes倍數的buffer 卻發現最後一哩 寫不進去 (不是512的倍數) 雖然有繞路解法 我可以 先把write file handler關掉 然後再開一次檔 但是不下 no buffer的flag. 把最後一哩 buffer 給 WriteFile 但是 這樣的API的"成對"使用 實在頗怪異... 請問 有版友 有任何方式 可以不要開關檔兩次 就可以用 no buffer的方式寫檔嗎? Thx~ -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.120.67

12/16 09:58, , 1F
Buffer跟NoBuffer應該在於內核的實作方式不同
12/16 09:58, 1F

12/16 10:01, , 2F
寫檔還是用Buffer就好,想知道差別要看內核的書了
12/16 10:01, 2F

12/16 10:04, , 3F
不知道能不能把最後一段補0湊滿512 真正長度另外存
12/16 10:04, 3F

12/17 01:54, , 4F
事實上 我是想問說有no buffer的flag, 卻沒有最後一步
12/17 01:54, 4F

12/17 01:54, , 5F
API可以 call 很怪... 要開兩次檔 讓我很難接受...
12/17 01:54, 5F

12/17 01:55, , 6F
XD 還有 當然不能補0阿 我試過讀小文字檔 後面補0 結果
12/17 01:55, 6F

12/17 01:55, , 7F
用筆記本開 後面多一大堆空格
12/17 01:55, 7F

12/17 02:02, , 8F
說到kernel實做 忘記我有買windows kernel的書了
12/17 02:02, 8F

12/17 02:02, , 9F
等等 study看看
12/17 02:02, 9F
文章代碼(AID): #1D2GNnuD (C_and_CPP)