| **Navigation:**  [[introduction.htm|Language Reference]] > 13 - Built-in Functions >====== BYTES (return size in bytes) ====== | [[bxor return bitwise exclusive or .htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[call call procedure from a dll .htm|{{btn_next_n.gif|Next page}}]] | | || **BYTES(**//file//**)** {{blk2blue.jpg|blk2blue.jpg}} | **BYTES** | Returns number of bytes in FILE, or most recently read. | | //file// | The label of a FILE. | The **BYTES** procedure returns the size of a FILE in bytes or the number of bytes in the last record successfully accessed. Following an OPEN statement, BYTES returns the size of the file. //file//{PROP:FileSize} is equivalent to BYTES after a file open and will also return the size of the file. After the //file// has been successfully accessed by GET, REGET, NEXT, PREVIOUS, ADD, or PUT, the BYTES procedure returns the number of bytes accessed in the RECORD. The BYTES procedure may be used to return the number of bytes read in a variable length record. In SQL tables, if BYTES(file) is used before the file is opened, then it returns the number of rows in the table. If it is used after the file is opened and a successful record retrieval, it returns the number of bytes in the record buffer. BYTES() return a negative value for files greater than 2Gb and less than 4Gb. Assigning the result to a ULONG gives the correct positive value of file size. | **Return Data Type:** | LONG | **Example:** **DosFileName  STRING(260),STATIC** **LastRec      LONG** **SavPtr       LONG(1)                    !Start at 1** **FileSize     LONG** **DosFile      FILE,DRIVER('DOS'),PRE(DOS),NAME(DosFileName)** **Record        RECORD** **F1             STRING(2000)** **              END** **             END** **BlobStorage  FILE,DRIVER('TopSpeed'),PRE(STO)** **File         BLOB,BINARY        ** **Record        RECORD** **FileName       STRING(64)** **              END** **             END** ** CODE** ** IF NOT FILEDIALOG('Choose File to Store',DosFileName,,0010b)** **  RETURN** ** END** ** OPEN(BlobStorage)                      !Open the BLOB file** ** STO:FileName = DosFileName             !and store the filename** ** OPEN(DosFile)                          !Open the file** ** FileSize = BYTES(DosFile)              !Get size of file** ** STO:File{PROP:Size} = FileSize         !and set the BLOB to store the file** ** LastRec = FileSize % SIZE(DOS:Record)  !Check for short record at end of file** ** LOOP INT(FileSize/SIZE(DOS:Record)) TIMES** **  GET(DosFile,SavPtr)                   !Get each record** **  ASSERT(NOT ERRORCODE())** **  !String slice data into BLOB:** **  STO:File[SavPtr - 1 : SavPtr + SIZE(DOS:Record) - 2] = DOS:Record** **  SavPtr += SIZE(DOS:Record)            !Compute next record pointer** ** END** ** IF LastRec                             !If short record at end of file** **  GET(DosFile,SavPtr)                   !Get last record** **  ASSERT(BYTES(DosFile) = LastRec)      ! size read should match computed size** **  STO:File[SavPtr - 1 : SavPtr + LastRec - 2] = DOS:Record** ** END** ** ADD(BlobStorage)** ** ASSERT(NOT ERRORCODE())** ** CLOSE(DosFile);CLOSE(BlobStorage)** **See Also:** [[open open a data structure .htm|OPEN]] [[prop filesize.htm|PROP:FileSize]]