Родились сегодня:
dfcz.pupkin@gmail.com


Лидеры рейтинга

ID: 405049

vsetin

Студент

2662


ID: 401284

Михаил Александров

Советник

903

Россия, Санкт-Петербург


ID: 226425

Konstantin Shvetski

Модератор

640

Россия, Северодвинск


ID: 400669

epimkin

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

385


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

378

Россия, пос. Теплоозёрск, ЕАО


ID: 325460

CradleA

Мастер-Эксперт

296

Беларусь, Минск


ID: 137394

Megaloman

Мастер-Эксперт

260

Беларусь, Гомель


8.9.0

20.06.2021

JS: 2.9.2
CSS: 4.5.10
jQuery: 3.6.0
DataForLocalStorage: 2021-06-24 14:46:01-standard


Создание программ на языке Basic.

Администратор раздела: Андреенков Владимир (Академик)

Консультация онлайн # 159917

Раздел: Basic
Автор вопроса: AkaProc
Дата: 08.02.2009, 12:18 Консультация закрыта
Поступило ответов: 2

Здравствуйте!
У меня проблема: мне надо узнать размер файла, а у больших файлов (>1Гб) функция FileLen находит его неправильно, она часто выводит отрицательное значение. Скажите, пожалуйста, как еще можно узнать размер файла?
Я программирую на VB6 (Visual Basic 6).
ОЧЕНЬ надеюсь на помощь! Большое спасибо!

Ответ # 243178 от Megaloman
Здравствуйте, AkaProc! Не программирую в VB6. Для VBA нашел описание функции

FileLen Function
Returns a Long specifying the length of a file in bytes.

Long data type
A 4-byte integer ranging in value from -2,147,483,648 to 2,147,483,647.
The ampersand (&) type-declaration character represents a Long in Visual Basic.

В справке по VBA прочел:
Тут четко указано, что FileLen правильно может вернуть значение не более 2,147,483,647
Повторюсь: Не программирую в VB6, под руками нет ни литературы, ни хелпов.
Наверное, можно поискать другую функцию, возвращающую не Long, a Double (если и в самом деле в VB6 функция FileLen возвращает значение Long, а не просто у Вас ошибка - пытаетесь значение функции присвоить переменной типа не Double).

Double data type
A data type that holds double-precision floating-point numbers as 64-bit numbers
in the range -1.79769313486231E308 to -4.94065645841247E-324 for negative values;
4.94065645841247E-324 to 1.79769313486232E308 for positive values.
The number sign (#) type-declaration character represents the Double

В справке по VBA прочел:
Вашу проблему решил другим путём:
Код
Dim Z1 As Double, Z2 As Double

MyFile1 = "W:\MOV01970.MPG"
MyFile2 = "E:\Virtual.CD\Painting_Big.iso"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set File1 = FSO.GetFile(MyFile1)
Z1 = File1.Size

Set File2 = FSO.GetFile(MyFile2)
Z2 = File2.Size
В результате работы этого кода получил правильные значения
Z1 = 1 287 071 917
Z2 = 4 603 215 872
(пробелы в число вставил для читаемости)

Надеюсь этот способ получится и у Вас, разве что придётся добавить описания типов в Dim

Megaloman

Мастер-Эксперт
08.02.2009, 17:52
Ответ # 243185 от Тесленко Евгений Алексеевич
Здравствуйте, AkaProc!
Код
Sub fileSize()
    Debug.Print Format(iLenFile("E:\Disks\FileImage.nrg"), "#,##0")
End Sub
Function iLenFile(sFileName$) As Double
Dim FSO, f
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFile(sFileName)
iLenFile = FSO.GetFile(sFileName).Size
Set FSO = Nothing
End Function

Тесленко Евгений Алексеевич

Посетитель
08.02.2009, 20:18
Мини-форум консультации # 159917
RedRider

1

= общий =    08.02.2009, 19:27

Я немного не понял: а до какого максимального объема файла я буду получать правильный результат?

q_id

Megaloman

Мастер-Эксперт

ID: 137394

2

= общий =    08.02.2009, 22:00

Подозреваю, что длина файла (в байтах) может выражаться пятнадцатизначной цифрой.

=====
Нет времени на медленные танцы

RedRider

3

= общий =    08.02.2009, 22:56

Благодарю!

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Megaloman

Мастер-Эксперт

Рейтинг: 260

solowey

Академик

Рейтинг: 104

SFResid

Мастер-Эксперт

Рейтинг: 1

Асмик Гаряка

Советник

Рейтинг: 0

Sergey V. Gornostaev

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

Рейтинг: 0

Роман Селиверстов

Советник

Рейтинг: 0