Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2015, 21:32   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 927
По умолчанию FileSeek возвращает -1 (Lazarus)

Код:
var
  FileHandle: THandle;
  FileHandleSize: Int64;
Код:
FileHandle := FileOpen(FilePath, fmOpenReadWrite); // Open file   
FileHandleSize := FileSeek(FileHandle, Int64(0), soFromEnd); // Calculate length of the file
При размере файла 554*115*072 байт FileSeek возвращает -1, при размере 3*119*606 возвращает размер нормально.
На лицо переполнение, но вот блин type Int64 = -9223372036854775808..92233720368547 75807;
п.с. так как в некотором используемом модуле присутствуют asm вставки, то вместо {$MODE OBJFPC}{$H+} использую {$MODE Delphi}
kta87 вне форума Ответить с цитированием
Старый 01.03.2015, 21:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Э-э-э... А почему не через TFileStream, если не секрет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.03.2015, 22:04   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что-то не верится. Там и для Integer должен нормально обработать 500Mb. -1 при ошибке, переполнение не при чем. FileOpen что возвращает в этом случае?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.03.2015, 22:38   #4
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 927
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Э-э-э... А почему не через TFileStream, если не секрет?
Не секрет конечно. Это как елка на новый год Привык работать любым файлом через Thandle когда через WindowsAPI код строиться.
Аватар, спасибо наводку дал четко! У меня из переменной FilePath логический диск вылетел. И что интересно пишу
Код:
  try
    FileHandle := FileOpen(FilePath, fmOpenReadWrite); // Open file
  except
    ShowMessage('Error open file!');
  end;
, а он молчит не сознается!
kta87 вне форума Ответить с цитированием
Старый 01.03.2015, 22:40   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Что-то не верится.
Ну... вообще-то есть такая проблема. Поэтому WINApiшная функция GetFileSize возвращает два результата - Hi и Lo значения размера. Кстати эта проблема решена в https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx насколько я помню.
Цитата:
Привык работать любым файлом через Thandle когда через WindowsAPI код строиться.
Тады obsolete функции не используй.
Цитата:
а он молчит не сознается!
А ты уверен что FileOpen должна давать исключения? Загляни в ее генофонд, там наверняка выход на WinAPI напрямую. А они исключений не генерируют. Им IF-ы подавай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.03.2015, 22:42   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

FileOpen надстройка над CreateFile (как и FileStream) и возвращает -1 при неудаче, тру не поможет, анализ ошибки - GetLastError
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.03.2015, 22:47   #7
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 927
По умолчанию

От оно как.. ну спасибо парни, а то бы сидел тупил и кодил...
kta87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекомпиляция программы(простой) Win Lazarus в Linux Lazarus Toxifer Фриланс 0 27.11.2012 22:46
[Lazarus] GetCaretPos возвращает нули. Alex Cones Lazarus, Free Pascal, CodeTyphon 6 18.02.2011 14:46
не возвращает массив... mrgrudge PHP 1 01.11.2010 11:58
не возвращает массив... mrgrudge PHP 2 26.10.2010 09:37
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40