Re: [問題] 如何從硬碟讀取資料而不是從記憶體

看板Python作者 (allstar)時間14年前 (2012/01/10 00:51), 編輯推噓0(008)
留言8則, 1人參與, 最新討論串2/2 (看更多)
搞定了,http://msdn.microsoft.com/en-us/library/aa364218%28VS.85%29.aspx 測試 code # -*- coding:utf-8 -*- import win32file import win32con import win32security import datetime import time filename = 'filename' def read(): begin = datetime.datetime.today() file = open(filename, 'rb') file.read() file.close() print datetime.datetime.today() - begin time.sleep(5) def clear(): secur_attr = win32security.SECURITY_ATTRIBUTES() secur_attr.Initialize() hfile = win32file.CreateFile(filename, win32con.GENERIC_READ | win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE, secur_attr, win32con.OPEN_ALWAYS, win32file.FILE_FLAG_NO_BUFFERING | win32file.FILE_FLAG_WRITE_THROUGH, 0) win32file.FlushFileBuffers(hfile) hfile.Close() print u'清空快取' clear() print u'第一次讀取資料,硬碟亮燈' read() print u'第二次讀取資料,硬碟不亮燈' read() print u'清空快取' clear() print u'第三次讀取資料,硬碟亮燈' read() print u'第四次讀取資料,硬碟不亮燈' read() print u'第五次讀取資料,硬碟不亮燈' read() -------------------------------------------------------------------------- 輸出結果 清空快取 第一次讀取資料,硬碟亮燈 0:00:18.751000 第二次讀取資料,硬碟不亮燈 0:00:00.343000 清空快取 第三次讀取資料,硬碟亮燈 0:00:18.766000 第四次讀取資料,硬碟不亮燈 0:00:00.328000 第五次讀取資料,硬碟不亮燈 0:00:00.344000 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.150.93

01/10 00:59, , 1F
忘了說,其實FlushFileBuffers那行執行的時候有出錯
01/10 00:59, 1F

01/10 00:59, , 2F
錯誤代碼1627 ERROR_FUNCTION_FAILED
01/10 00:59, 2F

01/10 01:00, , 3F
意思是 function failed during execution
01/10 01:00, 3F

01/10 01:00, , 4F
不知道到底是哪個參數設錯,不過加不加這個函式都能用
01/10 01:00, 4F

01/10 01:01, , 5F
就沒理它了,code忘了改掉
01/10 01:01, 5F

01/22 17:10, , 6F
可能要改用CreateFileW,不然在某些時候會出錯
01/22 17:10, 6F

01/22 17:11, , 7F
有可能是因為unicode path長度不到MAX_PATH
01/22 17:11, 7F

01/22 17:12, , 8F
但內部轉換時超過MAX_PATH導致CreateFile開檔時找不到路徑
01/22 17:12, 8F
文章代碼(AID): #1F2nhxPv (Python)
文章代碼(AID): #1F2nhxPv (Python)