[РЕШЕНО] Работа с функцией seek, адаптация при работе с SetFilePointer |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] Работа с функцией seek, адаптация при работе с SetFilePointer |
SABROG |
1.3.2010, 16:16
Сообщение
#31
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
И посмотрите, пожалуйста, приведенный код, он как раз допиленный, согласно всем объяснениям. startOffset - не равно 0! Сделайте 2 функции, старый вариант и новый вариант. Вызовите по очереди и в методах где идет seek() помещайте в лист QList<QPair<uint, uint> > offset. В first можно поместить WINAPI вариант, в second Qt. Потом всё это вывести в файл или на экран и посмотреть где идет разница. |
|
|
AD |
1.3.2010, 17:07
Сообщение
#32
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Сделайте 2 функции, старый вариант и новый вариант. Вызовите по очереди и в методах где идет seek() помещайте в лист QList<QPair<uint, uint> > offset. В first можно поместить WINAPI вариант, в second Qt. Потом всё это вывести в файл или на экран и посмотреть где идет разница. Мда.... Это разные две программы.... Ладно... что-нибудь постараюсь придумать! Сообщение отредактировал AD - 1.3.2010, 17:08 |
|
|
BRE |
1.3.2010, 17:42
Сообщение
#33
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Как я понял, кто-то хотел реализовать (через одно место) установку позиции файла относительно его начала?
/* Почему для этого не воспользоваться SetFilePointer с установкой флага FILE_BEGIN не понятно. Ну да ладно. */ Как мне кажется этот код:
эквивалентен этому:
И возможно дело не в этой функции. /* Все таки первая функция это шедевр. Сколько дней на нее смотрю... */ P.S. Кстати, для чего сохранять _offset, если его всегда можно получить через QFile::pos()? UP: Это: DWORD dwPtr = SetFilePointer(*WriteHandle, 0, 0, FILE_CURRENT); попытка получить текущую позицию? А где используется dwPtr? Сообщение отредактировал BRE - 1.3.2010, 17:50 |
|
|
AD |
1.3.2010, 18:00
Сообщение
#34
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Как я понял, кто-то хотел реализовать (через одно место) установку позиции файла относительно его начала? Нет. Не совсем так. Помещать следует не в начало файла, в позицию заданную с помощью _offset. В первом варианте - shift = 0, а вот во втором нет. Но вот _offset далеко не нулевое значение. Смысл такой. Есть файл, который хранит что в виде заголовка в начале, а потом идет содержимое других файлов. Так вот заголовки этих других файлов тоже следует писать уже после записи остальных данных - потому что после записи мы знаем смещение этих файлов относительно начало, crc-сумму и прочее.... UP: Это: DWORD dwPtr = SetFilePointer(*WriteHandle, 0, 0, FILE_CURRENT); попытка получить текущую позицию? А где используется dwPtr? Да это строка была для проверки. Забыли удалить, судя по всему. Собственно говоря, можно этот процесс сравнить с процессом написания оглавления в Word. Только представим себе, что оглавление делается не только ко всему документу (заголовку библиотеки), но и к каким отдельным главам (считываемым файлам, содержимое которых записывается в библиотеку). Т.е. вначале делается само содержание этих глав, а потом возвращаемся к странице (месту в файле) где необходимо сделать оглавление и создаем его (Word это умеет делать). Сообщение отредактировал AD - 1.3.2010, 17:52 |
|
|
BRE |
1.3.2010, 18:31
Сообщение
#35
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Мне сложно по одной этой функции судить, что хотели сделать разработчики. Возможно, _offset изменяется где то еще, а не только в этой функции???
Но, если нигде больше это значение не изменяется, то эта функция просто перемещает указатель файла на позицию относительно его начала. |
|
|
AD |
1.3.2010, 18:48
Сообщение
#36
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Изменяется. Сейчас делаю лог-файл для записи всех нужных данных. Буду смотреть. Если что сюда еще спрошу....
|
|
|
AD |
22.3.2010, 17:04
Сообщение
#37
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Ну тему можно закрывать. Последние изменения, которые были указаны в этой теме помогли. Проблема решена. Дальше мне просто нужно было правильно заполнять поле смещений в каждой карте.
|
|
|
Текстовая версия | Сейчас: 20.4.2024, 11:01 |