[問題] Windows API的讀寫檔案

看板C_and_CPP (C/C++)作者 (小勇)時間13年前 (2013/01/18 02:09), 編輯推噓2(2021)
留言23則, 4人參與, 最新討論串1/1
WindowsAPI中有CreateFile,ReadFile,WriteFile 可是我找不到想像是C++中的ios_base::app或是ios_base::ate 這類的設定請問WindowAPI有這功能嗎?? 另位假設有個文字檔內容是 1111133333 有辦法直接在中間插入而不是覆蓋或式重寫讓內容變成 111112222233333 可能嗎? 還請大大們求解~"~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 113.61.164.47

01/18 02:13, , 1F
Q1: CreateFile,dwDesiredAccess 參數. Q2:不可能,辦不到.
01/18 02:13, 1F

01/18 02:26, , 2F
關於第二個問題不可能的話 那我要修改很大的檔案時要怎麼
01/18 02:26, 2F

01/18 02:26, , 3F
呢?如果全部重寫或從中間開始取代不是很耗時間嗎??
01/18 02:26, 3F

01/18 02:26, , 4F
一般而言是直接用 binary 方式讀寫,直接去修改,如果要插入
01/18 02:26, 4F

01/18 02:27, , 5F
的話就是整個前段、後段複製到另一個檔案.
01/18 02:27, 5F

01/18 02:28, , 6F
耗時沒錯,但所有程式語言都沒辦法更改這特性.
01/18 02:28, 6F

01/18 02:29, , 7F
對了,如果你的檔案大小不大的話,暴力點,一開始全都塞到
01/18 02:29, 7F

01/18 02:29, , 8F
記憶體裡面做處理,再一次寫回,處理多次就賺到了。
01/18 02:29, 8F

01/18 02:31, , 9F
剛剛嘗試了一下發現光是寫入10MB的資料等待的感覺就出現了
01/18 02:31, 9F

01/18 02:31, , 10F
那假設檔案有1G我要修改的話不就...
01/18 02:31, 10F

01/18 02:34, , 11F
節哀...
01/18 02:34, 11F

01/18 02:34, , 12F
是因為我是用迴圈寫十萬次的關西嗎?感覺一次寫多一點好像
01/18 02:34, 12F

01/18 02:34, , 13F
不用等那麼久
01/18 02:34, 13F

01/18 02:35, , 14F
<不過我想知道你那 10MB 寫入的 code 是怎寫的...>
01/18 02:35, 14F

01/18 02:35, , 15F
對,一般而言如果你有辦法減少 io 次數,轉到 memory 上進行
01/18 02:35, 15F

01/18 02:36, , 16F
的話, "可能" 可以跑得更快,不過一切都要看 code 怎麼搞.
01/18 02:36, 16F

01/18 02:37, , 17F
其實我要做的檔案沒有很大啦XD 只是看到有些遊戲檔案都上G
01/18 02:37, 17F

01/18 02:37, , 18F
就很好奇= =
01/18 02:37, 18F

01/18 02:38, , 19F
遊戲讀取檔就不可能用 txt mode,binary mode 才好用!
01/18 02:38, 19F

01/18 02:40, , 20F
了解~"~ 謝謝大大的指教><
01/18 02:40, 20F

01/18 09:32, , 21F
分開寫@@
01/18 09:32, 21F

01/21 06:44, , 22F
你不會把人物紀錄檔放在材質包裡面
01/21 06:44, 22F

01/21 06:45, , 23F
所以真的有這種短時間十萬次的disk IO,邏輯架構要改.
01/21 06:45, 23F
文章代碼(AID): #1G-3vT4V (C_and_CPP)
文章代碼(AID): #1G-3vT4V (C_and_CPP)