FileLen(???)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

FileLen(???)

Сообщение GPP » 27.03.2008 (Чт) 13:35

Как получить длинну файла, если размер файла более 4гб :)?
FileLen() возвращает отрицательное значение:(. Длинна файла больше диапазона Long... :) Заранее огромное спасибо!
GPP(c) Gorlo Pavel Programming

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.03.2008 (Чт) 14:43

Через API, в Currency.
Lasciate ogni speranza, voi ch'entrate.

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 27.03.2008 (Чт) 15:29

API GetFileSize

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 27.03.2008 (Чт) 17:05

Код: Выделить всё
Public Function FileSize(FilePath As String) As Double
Dim lpFSHigh As Long 'старший разряд
Dim lpFSLow As Long 'младший
Dim h32 As Double

Dim WFD As WIN32_FIND_DATA
Dim hFile&


On Error Resume Next
Err.Clear

h32 = 2 ^ 32


hFile = FindFirstFile(FilePath, WFD)

If hFile = INVALID_HANDLE_VALUE Then Exit Function

lpFSLow = WFD.nFileSizeLow
lpFSHigh = WFD.nFileSizeHigh


If lpFSLow >= 0 Then
    FileSize = lpFSLow
Else
    FileSize = h32 + lpFSLow
End If

FileSize = FileSize + h32 * lpFSHigh
FindClose hFile
Err.Clear

End Function

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.03.2008 (Чт) 17:07

Не надо такой код.
Double вместо Currency -- безграмотность.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 27.03.2008 (Чт) 17:08

alibek писал(а):Не надо такой код.
Double вместо Currency -- безграмотность.


Это мелочи

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.03.2008 (Чт) 17:14

А что не мелочи?
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 27.03.2008 (Чт) 19:18

alibek писал(а):А что не мелочи?


А чем, собственно, Double хуже Currency?

Код работает? Тогда всё в порядке. Кому что-то не нравится - дорабатывает по своему усмотрению. Моё дело - предложить, Ваше-отказаться. Не более того.

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 27.03.2008 (Чт) 19:28

Мой вариант:
Код: Выделить всё
Private Const INVALID_HANDLE_VALUE = -1
Private Const OPEN_EXISTING = 3

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GethFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Any) As Long
Private Declare Sub PutMem4 Lib "msvbvm60" (Destination As Any, ByVal Value As Long)

Private Function GetFileSize(FileName As String) As Currency
Dim hFile As Long
hFile = CreateFile(FileName, 0, 0, ByVal 0&, OPEN_EXISTING, 0, 0)
If Not (hFile = INVALID_HANDLE_VALUE) Then
PutMem4 GetFileSize, GethFileSize(hFile, ByVal VarPtr(GetFileSize) + 4)
GetFileSize = GetFileSize * &H2710
CloseHandle hFile
End If
End Function


Один не достаток файл не может быть более ~1717986Gb (~1.63Pb) :D

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 28.03.2008 (Пт) 4:35

HiSER
Ты ещё найди такой файл :D
Подпись проходит рефакторинг


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 84

    TopList