Я пытаюсь отладить программу, которая манипулирует файлом. Например, я установил указатель файла на смещение 4 (используя основание 0), но вместо этого он начинается со смещения 5.
Чтобы попытаться выяснить, что происходит, я хочу поместить строку для распечатки указателя текущего файла (я не использую IDE для этого небольшого проекта, просто Notepad2 и командную строку). К сожалению, похоже, что нет функции Windows API для получения текущего указателя файла, только одна для его установки.
Я помню, как смог найти текущий указатель файла в Pascal (в DOS), но как определить текущий указатель файла в C ++ в Windows?
В отличие от большинства функций, которые предоставляют как метод получения, так и установку (в смысле чтения-записи), в действительности GetFilePointer
или же GetFilePointerEx
,
Однако ценность Можно получить по телефону SetFilePointer
(Ex)
. Два SetFilePointer
функции возвращают возврат / вывод из SetFilePointer
, но вы должны обязательно указать смещение 0
, а также FILE_CURRENT
как режим. Таким образом, он перемещается на 0 байт от того места, где он находится, а затем возвращается (я не могу поручиться за то, тратит ли он впустую циклы ЦП и ОЗУ на выполнение нулевого перемещения, но я думаю, что они оптимизированы, чтобы не делать этого).
Да, это противоречиво и сбивает с толку (и избыточно, и плохо разработано), но вы можете обернуть его по своему усмотрению GetFilePointer(Ex)
функция:
DWORD GetFilePointer (HANDLE hFile) {
return SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
}LONGLONG GetFilePointerEx (HANDLE hFile) {
LARGE_INTEGER liOfs={0};
LARGE_INTEGER liNew={0};
SetFilePointerEx(hFile, liOfs, &liNew, FILE_CURRENT);
return liNew.QuadPart;
}
Других решений пока нет …