crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  < 1 2 3 4 >  
Тема закрытаНачать новую тему
> [РЕШЕНО] Работа с функцией seek, адаптация при работе с SetFilePointer
SABROG
  опции профиля:
сообщение 26.2.2010, 14:21
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 26.2.2010, 13:27) *
я его ведь формирую как раз в этих строчках! :)


Тогда лучше тебя никто не знает где сейчас стоит указатель. По умолчанию после write() offset = curpos + datalength
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.2.2010, 14:54
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(SABROG @ 26.2.2010, 14:21) *
Тогда лучше тебя никто не знает где сейчас стоит указатель. По умолчанию после write() offset = curpos + datalength

Это я понимаю, я не понимаю, почему потом зависает... Сможете помочь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.2.2010, 15:32
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 26.2.2010, 14:54) *
Сможете помочь?


При наличии материала с которым можно работать.

Цитата(AD @ 26.2.2010, 13:27) *
<функция>(_writeHandle.get());


Если функция твоя, то лучше используй boost::weak_ptr. Так ты сможешь проверять жив ли указатель, даже если boost::shared_ptr его уже грохнул.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.2.2010, 15:45
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(SABROG @ 26.2.2010, 15:32) *
При наличии материала с которым можно работать.

Так.... Ну судя по всему мне стоит проверить идентичность моих переходов по файлу библиотеки.

Следующий код:
void T::SeekSet(unsigned int shift)
{
  SetFilePointer(*_writeHandle , -_offset + shift, NULL, FILE_CURRENT);
  DWORD dwPtr = SetFilePointer(*_writeHandle , 0, 0, FILE_CURRENT);
  _offset = shift;
}


был перевед в такой:
void T::SeekSet(unsigned int shift)
{
  bool seek = _writeHandle -> seek(-_offset + shift);
  if(seek) _offset = shift;
}

Т.е. код идентичен или же я напортачил где-то?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.2.2010, 18:14
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 26.2.2010, 15:45) *
unsigned int shift

В прошлой версии ты ограничился 32 битным смещением и соответственно максимальным размером файла в 4Гб. Может лучше qint64 поставить?

Цитата(AD @ 26.2.2010, 15:45) *
_writeHandle -> seek(-_offset + shift);


Предположим, что -offset = -20, а shift = 19, тогда смещение будет -1. Я выше писал, что отрицательные значения передавать нельзя.

Сообщение отредактировал SABROG - 26.2.2010, 18:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.2.2010, 18:30
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(SABROG @ 26.2.2010, 18:14) *
В прошлой версии ты ограничился 32 битным смещением и соответственно максимальным размером файла в 4Гб. Может лучше qint64 поставить?

В какой именно, прости?

Цитата(SABROG @ 26.2.2010, 18:14) *
Предположим, что -offset = -20, а shift = 19, тогда смещение будет -1. Я выше писал, что отрицательные значения передавать нельзя.

Как сделать правильно? Передавать модуль разности?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.2.2010, 21:40
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 26.2.2010, 18:30) *
В какой именно, прости?

Цитата(AD @ 26.2.2010, 15:45) *
void T::SeekSet(unsigned int shift)


Цитата(AD @ 26.2.2010, 18:30) *
Как сделать правильно? Передавать модуль разности?


Я не знаю логику твоей программы. Что содержится в offset, текущее положение курсора в файле? Что в shift, смещение на которое нужно сдвинуться от текущей позиции? Почему offset всегда передается отрицательным?

Цитата(AD @ 26.2.2010, 15:45) *
SetFilePointer(*_writeHandle , -_offset + shift, NULL, FILE_CURRENT);
DWORD dwPtr = SetFilePointer(*_writeHandle , 0, 0, FILE_CURRENT);


Две идентичные функции, а для одного и того же аргумента значение передается в разном стиле 0 и NULL. Это ты никак со стилем программирования определиться не можешь? ;)

Сообщение отредактировал SABROG - 26.2.2010, 21:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.2.2010, 23:11
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(SABROG @ 26.2.2010, 21:40) *
Я не знаю логику твоей программы. Что содержится в offset, текущее положение курсора в файле? Что в shift, смещение на которое нужно сдвинуться от текущей позиции? Почему offset всегда передается отрицательным?

Две идентичные функции, а для одного и того же аргумента значение передается в разном стиле 0 и NULL. Это ты никак со стилем программирования определиться не можешь? ;)

Нет, конечно. В старой программке сделано через функции винды. Теперь необходимо сделать в Qt-шном варианте. Я то уже определился со стилем. Первое - это старый вариант, второе - новый!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 26.2.2010, 23:16
Сообщение #19


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(AD @ 26.2.2010, 23:11) *
второе - новый!

это почему? вообще лучше nullptr использовать из C++0x.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.2.2010, 23:46
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(DEADHUNT @ 26.2.2010, 23:16) *
это почему? вообще лучше nullptr использовать из C++0x.

Что именно почему?
Нельзя, потому что компилятор старый, стандарт еще не введен в законнное действие, а у нас авиация - самая консервативная область! ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 16:10