Длинна файла
Добавлено: 17 Февраль 2010, 3:43
				
				С6.3 ABC 9056
Как узнать длинну файла на диске?
			Как узнать длинну файла на диске?
Место общения программистов, форум разработчиков БД на Clarion
https://www.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)