C++寻求使用CreateFile而不是fopen

tmi*_*hty 1 c++ windows fopen fseek fread

我想用HANDLE = CreateFile()交换FILE*以测试速度差异.

我正在尝试更改我的代码.

有人可以告诉我如何更改这两行以反映我现在处理的是句柄而不是文件*了吗?

fseek(myFile,iBytePos,SEEK_SET);
fread(&SomeValues[0],iByteCount,1,myFile);
Run Code Online (Sandbox Code Playgroud)

我试过了

LARGE_INTEGER l;

l.QuadPart=iBytePos;
SetFilePointer(myFile,l.LowPart,&l.HighPart,FILE_BEGIN);

DWORD dw;
BOOL result = ReadFile(myFile,&SomeValues[0],iByteCount,&dw,NULL);
Run Code Online (Sandbox Code Playgroud)

但有些事情是不正确的.我肯定在某个地方出了问题.

非常感谢你的帮助!

IIn*_*ble 5

在Windows API等效freadIS ReadFilefseekSetFilePointer.如果您只是更换这些呼叫,性能差异将很小,如果有的话.相比之下fseek,SetFilePointer支持文件> 2GB.如果你不需要那个电话就是:

SetFilePointer(myFile, iBytePos, NULL, FILE_BEGIN);
Run Code Online (Sandbox Code Playgroud)

通过利用其更大的灵活性,您可以使用Windows API加速磁盘I/O. 如果您有许多搜索 - 读 - 寻 - 读操作,您可能会从使用中获益ReadFileScatter.

优化的另一个潜在途径是使用异步I/O. 可以在同步和异步I/O中找到比较.