Длинна файла
Добавлено: 17 Февраль 2010, 3:43
С6.3 ABC 9056
Как узнать длинну файла на диске?
Как узнать длинну файла на диске?
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Код: Выделить всё
GetFileSize_ PROCEDURE (FileName_)
FIQ QUEUE,PRE(F_IQ)
Name STRING(FILE:MAXFILENAME)
ShortName STRING(13)
Date LONG
Time LONG
Size LONG
Attrib BYTE
END
CODE
DIRECTORY(FIQ, FileName_, FF_:DIRECTORY)
IF RECORDS(FIQ)
GET(FIQ,1)
RETURN FIQ.Size
END
RETURN 0
Код: Выделить всё
MAP
MODULE('WINDOWS')
CreateFile(*CString lpFileName, ULONG dwDesiredAccess, ULONG dwShareMode, |
ULONG Addr_SecurityAttributes=0, ULONG dwCreationDisposition, ULONG dwFlagsAndAttributes, |
UnSigned hTemplateFile=0),UnSigned, PASCAL,RAW,Name('CreateFileA'),DLL
GetFileSize(UnSigned hFile, ULONG Addr_FileSizeHigh=0),ULONG, PASCAL,DLL
END !MODULE
END !MAP
INVALID_HANDLE_VALUE EQUATE(-1)
GENERIC_READ EQUATE(80000000h)
FILE_SHARE_NONE Equate(0)
FILE_SHARE_READ Equate(1)
FILE_SHARE_WRITE Equate(2)
FILE_SHARE_DELETE Equate(4)
FILE_SHARE_BOTH Equate(FILE_SHARE_READ + FILE_SHARE_WRITE)
FILE_SHARE_ALL Equate(FILE_SHARE_BOTH + FILE_SHARE_DELETE)
OPEN_EXISTING Equate(3) ! открыть существующий (при отсутств.НЕ СРАБОТАЕТ-ошибка с кодом 2)
FILE_ATTRIBUTE_READONLY EQUATE(00000001h)
FILE_ATTRIBUTE_HIDDEN EQUATE(00000002h)
FILE_ATTRIBUTE_SYSTEM EQUATE(00000004h)
FILE_ATTRIBUTE_ARCHIVE EQUATE(00000020h)
FILE_ATTRIBUTE_NORMAL EQUATE(00000080h)
FILE_ATTRIBUTE_TEMPORARY EQUATE(00000100h) ! временный
FILE_ATTRIBUTE_OFFLINE EQUATE(00001000h) ! данные немедленно недоступны (в дальнем хранилище)
FILE_ATTRIBUTE_ENCRYPTED EQUATE(00004000h)
!*****************************************************************************************
FileLengthInBytes FUNCTION (String FullNameOfFile, <*ULong Bytes>), LONG ! 0=найден/иначе код ошибки открытия файла
err Long(0)
hFile UnSigned
lpcFileName CString(1024)
!*****************************************************************************************
CODE
lpcFileName = FullNameOfFile
hFile = CreateFile(lpcFileName, GENERIC_READ, FILE_SHARE_BOTH, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
If hFile = INVALID_HANDLE_VALUE Then ! Ошибка
err = GetLastError()
If ~Omitted(2) Then Clear(Bytes).
Else
If ~Omitted(2) Then Bytes = GetFileSize(hFile).
CloseHandle(hFile)
End
Return(err)