Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как узнать текущее положение в файле?

22.12.2014, 09:16. Показов 3179. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как узнать текущее положение в файле? Я вызываю функцию и передаю ей смешение, она должна вызвать
C++
1
SetFilePointerEx(File, CompositOffset, NULL, FILE_BEGIN)
, прочитать данные по этому смещению, а перед завершением восстановить положение в файле, которое было перед
C++
1
SetFilePointerEx(File, CompositRootHeaderOffset, NULL, FILE_BEGIN)
и вызывающая функция должна продолжить чтение файла с того места, докуда дошла пере вызовом той функции, которая вызвала
C++
1
SetFilePointerEx(File, CompositOffset, NULL, FILE_BEGIN)
. Я так понимаю, что надо положить в переменную текущее положение в файле, а потом ещё раз выполнить
C++
1
SetFilePointerEx(File, CompositOldOffset, NULL, FILE_BEGIN)
уже на это смещение. А где взять текущее положение в файле?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2014, 09:16
Ответы с готовыми решениями:

Функция, возвращающая текущее положение курсора
Здравствуйте, уважаемые форумчане! Нужна ваша помощь. Вопрос заключается в следующем: нужно написать на Си (компилятор Microsoft Visual...

Напомните, как зовут функцию, которая меняет положение в файле
Декларация файловой переменной HANDLE File;, открытие файла для чтения File=CreateFile(Buffer.FilePath.c_str(), GENERIC_READ,...

Как узнать текущее положение курсора ?
Добрый день ! Подскажите пожалуйста как узнать текущее положение курсора ? как я понял должна быть какая-то функция которая...

7
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.12.2014, 09:35
You can also use SetFilePointerEx to query the current file pointer position. To do this, specify a move method of FILE_CURRENT and a distance of zero.
C++
1
2
LARGE_INTEGER FilePos;
SetFilePointerEx(File, 0, &FilePos, FILE_CURRENT);
2
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.12.2014, 10:38  [ТС]
Попробовал:
error: no match for 'operator=' (operand types are '_LARGE_INTEGER' and 'uint64_t {aka long long unsigned int}')|
.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.12.2014, 10:57
если посмотреть объявление LARGE_INTEGER
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// выдрано из winnt.h
 
#if defined(MIDL_PASS)
typedef struct _LARGE_INTEGER {
#else // MIDL_PASS
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
#endif //MIDL_PASS
    LONGLONG QuadPart;
} LARGE_INTEGER;
LONGLONG
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//
// __int64 is only supported by 2.0 and later midl.
// __midl is set by the 2.0 midl and not by 1.0 midl.
//
 
#define _ULONGLONG_
#if (!defined (_MAC) && (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)))
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
 
#define MAXLONGLONG                         (0x7fffffffffffffff)
 
 
#else
 
#if defined(_MAC) && defined(_MAC_INT_64)
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
 
#define MAXLONGLONG                      (0x7fffffffffffffff)
 
 
#else
typedef double LONGLONG;
typedef double ULONGLONG;
#endif //_MAC and int64
 
#endif
 
typedef LONGLONG *PLONGLONG;
typedef ULONGLONG *PULONGLONG;
Добавлено через 1 минуту
т.е. в общем случае uint64_t не подходит для указания/получения позиции в файле
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.12.2014, 11:01  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
т.е. в общем случае uint64_t не подходит для указания/получения позиции в файле
Где хоть один uint64_t:
C++
1
2
3
_LARGE_INTEGER CompositOffset;
 _LARGE_INTEGER OldCompositOffset;
 SetFilePointerEx(File, 0, &OldCompositOffset, FILE_CURRENT);
?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.12.2014, 11:08
Цитата Сообщение от taras atavin Посмотреть сообщение
error: no match for 'operator=' (operand types are '_LARGE_INTEGER' and 'uint64_t {aka long long unsigned int}')|
где то у вас в коде
C++
1
2
3
uint64_t xz;
//...
LARGE_INTEGER xx = xz; // ошибка компиляции
можно
C++
1
2
3
4
uint64_t xz;
//...
LARGE_INTEGER xx;
xx.QuadPart = xz; // тут будет варнинг о преобразовании беззнакового к знаковому типу
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.12.2014, 11:22  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
где то у вас в коде
Код C++
1
2
3
uint64_t xz;
//...
LARGE_INTEGER xx = xz; // ошибка компиляции
Нет. Ругается именно на строку
C++
1
SetFilePointerEx(File, 0, &OldCompositOffset, FILE_CURRENT);
.

Добавлено через 3 минуты
Если
C++
1
2
3
4
5
_LARGE_INTEGER CompositOffset;
 _LARGE_INTEGER OldCompositOffset;
 _LARGE_INTEGER CompositZero;
 CompositZero.QuadPart=0;
 SetFilePointerEx(File, CompositZero, &OldCompositOffset, FILE_CURRENT);
, то эйси. А с нолём прямо в вызове ругается. Но это ж не дело каждый раз этот ноль присваивать.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.12.2014, 11:36
Цитата Сообщение от taras atavin Посмотреть сообщение
А с нолём прямо в вызове ругается.
значит у меня в примере ошибка была, извиняюсь.
Цитата Сообщение от taras atavin Посмотреть сообщение
Но это ж не дело каждый раз этот ноль присваивать.
C++
1
SetFilePointerEx(File, { { 0,0 } }, &FilePos, FILE_CURRENT);// я не уверен, что так корректно делать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2014, 11:36
Помогаю со студенческими работами здесь

Как узнать текущее положение указателя файла?
Как узнать текущее положение указателя файла в байтах?

Как узнать текущее положение курсора в текстовом окне ???
Смотрите сабж.. нужно позарез ))

Как узнать текущее положение (координаты) формы на экране?
Заранее спасибо всем ответившим!)

Как сохранить текущее положение курсора в файле?
как сохранить текущее положение курсора в файле , а затем в дальнейшем поставить курсор на это место??

Создайте командный файл, который спрашивает: «Вы хотите узнать текущее время или текущую дату?» – и в зависимости от ответа выдает на экран текущее вр
Здраствуйте очень сильно нужна помощь в написании батников кто может помогите пожалуйста!!! 1 Создайте командный файл, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru