簡體   English   中英

使用kernel32.dll讀取文件(Python)

[英]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將需要byrefpointer

您也可以使用pywin32 ,我相信它會更簡單。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM