![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь Подтвердите свой е-майл
Регистрация: 26.03.2008
Сообщений: 42
|
![]()
Помогите пожалуйста разобраться.
Написал программу которая должна выводить инфо о файлах. Поиск в каталоге производится функциями FindFirst и FindNext. Кстати, есть ли альтернативные методы поиска файлов? Когда файл размером до 2ГБ, или около того, всё нормально, но попался файл с размером 3*896*010*831 байт, и т.к TSearchRec = record Size : Integer; то значение Size было отрицательным числом. Я обратил внимание на TSearchRec = record FindData: TWin32FindData оказалось что значение TSearchRec.Size берётся из TSearchRec.FindData.NFileSizeLow : DWORD; Тогда в своей программе я просто начал писать не FileSize := TSearchRec.Size; а FileSize := TSearchRec.FindData.NFileSizeLow; теперь значение 3896010831 отображается правильно. Далее попался "*.MDF" Архив (Образ диска). Его размер- 4*655*677*440 байт, это значение выходит за диапазон допустимых значений LongWord, и в переменной TSearchRec.FindData.NFileSizeLow теперь тоже неправильное значение. Вместо 4 655 677 440 байт там 360 710 144 байт. Можно ли как то получить правильный размер файла из TSearchRec, не обращаясь к другим функциям? Кстати TSearchRec.FindData.NFileSizeHigh при малых размерах файла = 0. А в случае с 4*655*677*440 байт = 1. Может здесь нужно учитывать и это значение?. И если нужно, то каким образом? Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Попробуйте GetFileSizeEx
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Цитирую http://api.farmanager.com/ru/winapi/...find_data.html
Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь Подтвердите свой е-майл
Регистрация: 26.03.2008
Сообщений: 42
|
![]()
Спасибо. Попробую.
А где лучше держать результат? В Int64? |
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну если там держать получится, держи там...
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 | |
Пользователь Подтвердите свой е-майл
Регистрация: 26.03.2008
Сообщений: 42
|
![]() Цитата:
выдал: "Overflow in conversion or arithmetic operation" похоже что ошибка здесь (1+MAXDWORD). так и должно быть? Может у меня что- то неправильно настроено? Немного по экспериментировав, написал два рабочих способа. Function oooooo : Int64; Var SR : TSearchRec; begin { Код........} // 1- й вариант Result := MAXDWORD; Result := SR.FindData.nFileSizeHigh * (Result + 1) + SR.FindData.nFileSizeLow; // 2- й вариант Result := SR.FindData.nFileSizeHigh; Result := (Result shl 32) xor SR.FindData.nFileSizeLow; Какой из этих вариантов лучше использовать? |
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите разобраться | Tanuska___:) | БД в Delphi | 1 | 04.09.2008 14:56 |
Помогите разобраться с С++ | igroman | Общие вопросы C/C++ | 1 | 03.08.2008 23:15 |
Помогите разобраться! | SerSasha | Помощь студентам | 4 | 09.06.2008 10:00 |
Помогите разобраться! | Кот | Microsoft Office Excel | 3 | 14.08.2007 19:48 |