[英]Read file with kernel32.dll (Python)
我需要使用kernel32.dll讀取文件。 我已經閱讀了有關CreateFile,SetFilePointer和ReadFile方法的信息(我需要使用它們)-但不確定如何應用它們。
如msdn所述,我需要指定所有這些參數。 我知道首先是文件的路徑,但不知道其他參數是什么,我應該以哪種方式插入它們。
任何人都可以通過kernel32.dll CreateFile,SetFilePointer和ReadFile上的“ howto”幫助我。
真的感謝任何幫助。
更新資料
我嘗試使用kernel32的原因是,我需要一種真正非常快的方式來讀取閃存驅動器。 我需要一些可以直接從閃存讀取的方式,而無需花費時間在其文件系統中。 我的意思是直接訪問所需的字節,而無需在文件系統中進行長時間的搜索。
這是我用來閱讀的代碼
index = 524288
data = open('Path-to-file', 'rb')
while index < file_length:
data.seek(index)
headers.append((index, data.read(128)))
index += cluster
data.close()
該代碼大約需要8分鍾才能通過USB瀏覽1 Gb文件。
我需要在4分鍾時完成。
如果有人對我可以采取其他方法提出建議,我將不勝感激。
更新資料
我已經嘗試過像這樣的win32file(pywin32):
def get_headers(self):
while self.index < self.file_len:
handle = win32file.CreateFile(self.path, win32file.GENERIC_READ,
win32file.FILE_SHARE_READ, None,
win32file.OPEN_EXISTING,
win32file.FILE_ATTRIBUTE_NORMAL, None)
win32file.SetFilePointer(handle, self.index, win32file.FILE_CURRENT)
header_ = win32file.ReadFile(handle, 128, None)
header = header_[1]
self.headers.append((self.index, header))
self.index += cluster
win32file.CloseHandle(handle)
比python的“ seek”和“ read”函數花費更多的時間(12分鍾)。 有誰知道為什么使用Windows dll模塊會增加讀取時間?
這是CreateFile
的最常見用法:
hFile = CreateFile("file.txt", GENERIC_READ, 0, 0, 3, 128, None)
和ReadFile
:
ReadFile(hFile, pOutput, nNumberOfBytesToRead, lpNumberOfBytesRead, 0)
請注意,如果使用ctypes ,則對於pOutput
(將在其中存儲文件內容),將需要c_char_p
(代表字符串),對於lpNumberOfBytesRead
將需要byref
或pointer
。
您也可以使用pywin32 ,我相信它會更簡單。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.