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

时间:2014-07-09 14:25:49

标签: python kernel32

我需要使用kernel32.dll读取文件。我读过有关CreateFile,SetFilePointer和ReadFile方法(我需要使用它们) - 但不知道如何应用它们。

如上所述at msdn我需要指定所有这些参数。我知道首先是文件路径,但不知道那些其他参数是什么以及我应该以什么方式插入它们。

任何人都可以帮我解决kernel32.dll CreateFile,SetFilePointer和ReadFile上的“howto”。

非常感谢任何帮助。

更新

我尝试使用kernel32的原因是我需要非常快速的方式来读取闪存驱动器。我需要一些能直接从flash读取的方法,而不需要花时间在其文件系统中。我的意思是直接访问所需的字节,而不需要在文件系统中进行长时间的搜索。

以下是我用于阅读的代码

    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“搜索”和“阅读”功能需要更多时间(12分钟)。 有谁知道为什么Windows dll模块的使用会增加阅读时间?

1 个答案:

答案 0 :(得分:0)

以下是CreateFile的最常见用法:

hFile = CreateFile("file.txt", GENERIC_READ, 0, 0, 3, 128, None)

ReadFile

ReadFile(hFile, pOutput, nNumberOfBytesToRead, lpNumberOfBytesRead, 0)

请注意,如果您使用ctypes,则c_char_p需要pOutput(代表字符串)(文件内容将被存储),{{1 } {} {}或byref {/ 1}}。

你也可以使用pywin32,我相信这会更简单。

希望这有帮助。