Windows — C ++ Ищу с помощью CreateFile вместо fopen

Я хотел бы обменять FILE * с HANDLE = CreateFile (), чтобы проверить разницу в скорости.

Я пытаюсь изменить свой код сейчас.

Может ли кто-нибудь сказать мне, как я должен изменить эти 2 строки, чтобы отразить, что я имею дело с дескриптором сейчас, а не с ФАЙЛОМ *?

fseek(myFile,iBytePos,SEEK_SET);
fread(&SomeValues[0],iByteCount,1,myFile);

Я старался

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);

но что-то не правильно. Должно быть, я где-то ошибся.

Огромное спасибо за помощь!

1

Решение

Windows API эквивалент для fread является ReadFile и для fseek является SetFilePointer. Если вы просто замените эти вызовы, разница в производительности будет незначительной, если таковая имеется. В отличие от fseek, SetFilePointer поддерживает файлы> 2 ГБ. Если вам не нужно, что вызов просто:

SetFilePointer(myFile, iBytePos, NULL, FILE_BEGIN);

Вы можете ускорить дисковый ввод-вывод, используя Windows API, используя его большую гибкость. Если у вас много операций поиска-чтения-поиска-чтения, вы можете воспользоваться ReadFileScatter вместо.

Другим потенциальным маршрутом для оптимизации было бы использование асинхронного ввода-вывода. Сравнение можно найти на Синхронный и асинхронный ввод-вывод.

5

Другие решения

За fseek ты можешь использовать SetFilePointerEx или же SetFilePointer,

За fread ты можешь использовать ReadFile или же ReadFileEX

Вы можете найти помощь здесь

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365542(v=vs.85).aspx

0

По вопросам рекламы [email protected]