作者os653 (allstar)
看板Python
標題Re: [問題] 如何從硬碟讀取資料而不是從記憶體
時間Tue Jan 10 00:51:04 2012
搞定了,
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
→ os653:忘了說,其實FlushFileBuffers那行執行的時候有出錯 01/10 00:59
→ os653:錯誤代碼1627 ERROR_FUNCTION_FAILED 01/10 00:59
→ os653:意思是 function failed during execution 01/10 01:00
→ os653:不知道到底是哪個參數設錯,不過加不加這個函式都能用 01/10 01:00
→ os653:就沒理它了,code忘了改掉 01/10 01:01
→ os653:可能要改用CreateFileW,不然在某些時候會出錯 01/22 17:10
→ os653:有可能是因為unicode path長度不到MAX_PATH 01/22 17:11
→ os653:但內部轉換時超過MAX_PATH導致CreateFile開檔時找不到路徑 01/22 17:12