Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用kernel32.dll(Python)读取文件_Python_Kernel32 - Fatal编程技术网

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

使用kernel32.dll(Python)读取文件,python,kernel32,Python,Kernel32,我需要使用kernel32.dll读取文件。我已经阅读了CreateFile、SetFilePointer和ReadFile方法,但不知道如何应用它们 如前所述,我需要指定所有这些参数。我知道第一个参数是文件的路径,但不知道其他参数是什么,我应该以什么方式插入它们 有人能帮我了解一下kernel32.dll CreateFile、SetFilePointer和ReadFile的用法吗 非常感谢您的帮助 更新 我尝试使用内核32的原因是我需要一种非常快速的方式来读取闪存驱动器。我需要一些方法,将直

我需要使用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)