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

Обсуждение

давно
Модератор
137394
1850
08.02.2009, 17:52
общий
это ответ
Здравствуйте, AkaProc! Не программирую в VB6. Для VBA нашел описание функции
Цитата: В справке по 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.
Тут четко указано, что FileLen правильно может вернуть значение не более 2,147,483,647
Повторюсь: Не программирую в VB6, под руками нет ни литературы, ни хелпов.
Наверное, можно поискать другую функцию, возвращающую не Long, a Double (если и в самом деле в VB6 функция FileLen возвращает значение Long, а не просто у Вас ошибка - пытаетесь значение функции присвоить переменной типа не Double).
Цитата: В справке по VBA прочел:
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
Вашу проблему решил другим путём:
Код:
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
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
08.02.2009, 19:27
общий
Я немного не понял: а до какого максимального объема файла я буду получать правильный результат?
Неизвестный
08.02.2009, 20:18
общий
это ответ
Здравствуйте, 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
давно
Модератор
137394
1850
08.02.2009, 22:00
общий
Подозреваю, что длина файла (в байтах) может выражаться пятнадцатизначной цифрой.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
08.02.2009, 22:56
общий
Благодарю!
Форма ответа