作者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
1F:→ os653:忘了说,其实FlushFileBuffers那行执行的时候有出错 01/10 00:59
2F:→ os653:错误代码1627 ERROR_FUNCTION_FAILED 01/10 00:59
3F:→ os653:意思是 function failed during execution 01/10 01:00
4F:→ os653:不知道到底是哪个参数设错,不过加不加这个函式都能用 01/10 01:00
5F:→ os653:就没理它了,code忘了改掉 01/10 01:01
6F:→ os653:可能要改用CreateFileW,不然在某些时候会出错 01/22 17:10
7F:→ os653:有可能是因为unicode path长度不到MAX_PATH 01/22 17:11
8F:→ os653:但内部转换时超过MAX_PATH导致CreateFile开档时找不到路径 01/22 17:12