看板 C_and_CPP 關於我們 聯絡資訊
平台 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
stupid0319:Buffer跟NoBuffer應該在於內核的實作方式不同 12/16 09:58
stupid0319:寫檔還是用Buffer就好,想知道差別要看內核的書了 12/16 10:01
james732:不知道能不能把最後一段補0湊滿512 真正長度另外存 12/16 10:04
softwind:事實上 我是想問說有no buffer的flag, 卻沒有最後一步 12/17 01:54
softwind:API可以 call 很怪... 要開兩次檔 讓我很難接受... 12/17 01:54
softwind:XD 還有 當然不能補0阿 我試過讀小文字檔 後面補0 結果 12/17 01:55
softwind:用筆記本開 後面多一大堆空格 12/17 01:55
softwind:說到kernel實做 忘記我有買windows kernel的書了 12/17 02:02
softwind:等等 study看看 12/17 02:02