使用kernel32.dll(Python)读取文件
我需要使用kernel32.dll读取文件。我已经阅读了CreateFile、SetFilePointer和ReadFile方法,但不知道如何应用它们 如前所述,我需要指定所有这些参数。我知道第一个参数是文件的路径,但不知道其他参数是什么,我应该以什么方式插入它们 有人能帮我了解一下kernel32.dll CreateFile、SetFilePointer和ReadFile的用法吗 非常感谢您的帮助 更新 我尝试使用内核32的原因是我需要一种非常快速的方式来读取闪存驱动器。我需要一些方法,将直接从闪存读取,而无需在其文件系统中花费时间。我的意思是直接访问所需的字节,而无需在文件系统中进行长时间搜索 这是我用来阅读的代码使用kernel32.dll(Python)读取文件,python,kernel32,Python,Kernel32,我需要使用kernel32.dll读取文件。我已经阅读了CreateFile、SetFilePointer和ReadFile方法,但不知道如何应用它们 如前所述,我需要指定所有这些参数。我知道第一个参数是文件的路径,但不知道其他参数是什么,我应该以什么方式插入它们 有人能帮我了解一下kernel32.dll CreateFile、SetFilePointer和ReadFile的用法吗 非常感谢您的帮助 更新 我尝试使用内核32的原因是我需要一种非常快速的方式来读取闪存驱动器。我需要一些方法,将直
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()
此代码通过USB查看1GB文件大约需要8分钟
我需要在4分钟内完成
如果有人有任何建议,我可以做它的其他方式-我真的很感激
更新
我尝试过Win32文件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分钟。
有人知道为什么使用module for Windows dll会增加读取时间吗?以下是CreateFile最常用的用法: 和读取文件: 注意,如果使用,则需要c_char_p,它表示存储文件内容的pOutput的字符串,并需要ByRef作为lpNumberOfBytesRead的指针 你也可以用它,我相信它会更简单
希望这能有所帮助。您认为闪存驱动器不使用文件系统吗?您是在尝试访问驱动器上的原始字节,还是在文件中查找某个位置(如果是原始的话),我不确定这两个高级接口是否会有帮助。如果在一个文件中,那么请坚持使用python代码。底层的文件访问可能是基于C的,速度与您不使用较低级别的语言时的速度差不多。另外,拇指驱动器上的文件系统是什么?文件系统是FAT32。下面是我要做的:我有一个包含原始字节的二进制文件。我需要在每个集群的开始寻找,读取标题并保存它。尝试用C写读值得吗?我应该如何指定CreateFile函数?我试过这个,但不起作用:kernel=ctypes.windell.kernel32;handle=kernel.CreateFileWself.path,kernel.GENERIC\u READ,kernel.FILE\u SHARE\u READ,None,kernel.OPEN\u EXISTING,kernel.FILE\u ATTRIBUTE\u NORMAL,无应工作的。如果您使用的是CreateFileW,请确保self.path是unicode字符串。您还可以使用GetLastError来查看发生了什么。首先,我得到一个错误,即找不到内核的泛型读取。所以我不能像这样使用它,只要定义它:GENERIC\u READ=0x8000000。
hFile = CreateFile("file.txt", GENERIC_READ, 0, 0, 3, 128, None)
ReadFile(hFile, pOutput, nNumberOfBytesToRead, lpNumberOfBytesRead, 0)