Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FileSeek возвращает большое отрицательное число 
:(
    Опции темы
Zakhar_Shan
Дата 11.12.2012, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Есть процедура по открытию бинарника
Код

    fileHandle=FileOpen(fileName,fileOpenMode);
    fileLength =FileSeek(fileHandle,0,2);


Задача FileSeek, узнать размер файлика. Приложение уже давно работает без отказов. Но попался файлик, FileSeek возвращает мега большое отрицательное число. В Help'e написано
Цитата

If FileSeek is successful, it returns the new position of the file pointer; otherwise, it returns -1. 

т.е. в случае неудачи возврат -1. Но он мне возвращает явно не -1.
Тем более не пойму, в чем причина ошибки именно в этом файле...

PM MAIL   Вверх
shuttle
Дата 11.12.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Цитата

Есть процедура по открытию бинарника
Код

fileHandle=FileOpen(fileName,fileOpenMode);
fileLength =FileSeek(fileHandle,0,2);


fileLength - какого типа? сделай unsigned.
--------------------
PM MAIL   Вверх
Zakhar_Shan
Дата 11.12.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(shuttle @ 11.12.2012,  14:25)
Цитата

Есть процедура по открытию бинарника
Код

fileHandle=FileOpen(fileName,fileOpenMode);
fileLength =FileSeek(fileHandle,0,2);


fileLength - какого типа? сделай unsigned.

__int64  fileLength ... 
А в мануале:
Цитата

int FileSeek(int Handle, int Offset, int Origin);
Int64 FileSeek(int Handle, Int64 Offsetconst, int Origin);

PM MAIL   Вверх
math64
Дата 11.12.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(shuttle @  11.12.2012,  14:25 Найти цитируемый пост)
fileLength - какого типа? сделай unsigned. 

файл может быть длиной терабайт, но никак не экзабайт, таких больших винтов ещё нет.
Но был случай, когда из-за сбоя Винда выдавала свободное место в экзабайтах.
PM   Вверх
Zakhar_Shan
Дата 11.12.2012, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(math64 @ 11.12.2012,  15:34)
Цитата(shuttle @  11.12.2012,  14:25 Найти цитируемый пост)
fileLength - какого типа? сделай unsigned. 

файл может быть длиной терабайт, но никак не экзабайт, таких больших винтов ещё нет.
Но был случай, когда из-за сбоя Винда выдавала свободное место в экзабайтах.

Файл то размером 2.2 Гб всего....:(
PM MAIL   Вверх
volatile
Дата 11.12.2012, 19:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Zakhar_Shan, если внимательно почитать, то что вы сами запостили:
Цитата(Zakhar_Shan @  11.12.2012,  14:08 Найти цитируемый пост)
fileLength =FileSeek(fileHandle,0,2);

Цитата(Zakhar_Shan @  11.12.2012,  14:43 Найти цитируемый пост)
А в мануале:
Цитата
int FileSeek(int Handle, int Offset, int Origin);
Int64 FileSeek(int Handle, Int64 Offsetconst, int Origin);

то проблема, и ее решение будут очевидны.

нужно ли мне продолжать, или сами уже догадались?

Добавлено через 5 минут и 33 секунды

Впрочем, ладно. учитывая что в соседней теме, вы признались

Цитата(Zakhar_Shan @  11.12.2012,  06:43 Найти цитируемый пост)
Ну, я типо любитель, укажите путь, 

не стану вас мучить

Цитата(Zakhar_Shan @  11.12.2012,  14:08 Найти цитируемый пост)
fileLength =FileSeek(fileHandle,0LL,2);


PM MAIL   Вверх
Zakhar_Shan
Дата 11.12.2012, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



 smile  опа.... даже так...
PM MAIL   Вверх
volatile
Дата 11.12.2012, 19:45 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(Zakhar_Shan @  11.12.2012,  19:28 Найти цитируемый пост)
 smile  опа.... даже так... 

Не понимаю зачем такие большие глаз делать? ведь очевидно что у вас вызывается 32-разрядная функция ФайлСик
А нужно вызвать перегруженную 64-разрядную

На всякий случай, если в вашем компиляторе не поддерживаюся суффикс 'LL' для цифровых литералов, можно непосредствеено привести Offset к 64 разрядному целому:
Цитата(Zakhar_Shan @  11.12.2012,  14:08 Найти цитируемый пост)
fileLength =FileSeek(fileHandle, (Int64)0, 2);



Это сообщение отредактировал(а) volatile - 11.12.2012, 19:51
PM MAIL   Вверх
Zakhar_Shan
Дата 12.12.2012, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(volatile @ 11.12.2012,  19:45)
Цитата(Zakhar_Shan @  11.12.2012,  19:28 Найти цитируемый пост)
 smile  опа.... даже так... 

Не понимаю зачем такие большие глаз делать? ведь очевидно что у вас вызывается 32-разрядная функция ФайлСик
А нужно вызвать перегруженную 64-разрядную

На всякий случай, если в вашем компиляторе не поддерживаюся суффикс 'LL' для цифровых литералов, можно непосредствеено привести Offset к 64 разрядному целому:
Цитата(Zakhar_Shan @  11.12.2012,  14:08 Найти цитируемый пост)
fileLength =FileSeek(fileHandle, (Int64)0, 2);

Просто я особой литературы не читал, так все для начинающих, и честно говоря от корки до корки, но о таком первый раз слышу... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.