Rapid-Q Documentation by William Yu (c)1999-2000 | Appendix A: QFILESTREAM

# QFILESTREAM Component

  QFilestream is Rapid-Q's way of handling files. It's more elegant than the GET, and PUT method of traditional BASIC.
  QFilestream Properties

  Field | Type | R/W | Default | Support

  EOF | INTEGER | R |  | WXG
  | EOF specifies whether the file pointer has reached the end of file.
  Handle | INTEGER | R |  | W
  LineCount | INTEGER | R |  | WXG
  | LineCount determines how many lines there are in the file. Note that LineCount ignores the CR character, and will only detect LF, so it treats CRLF as one line, but LFLF as 2 lines.
  Position | INTEGER | RW |  | WXG
  | Position specifies the current position of the file pointer, any read/write operations will begin from here.
  Size | INTEGER | R |  | WXG
  | Size determines the size of the file in bytes.

  QFilestream Methods

  Method | Type | Description | Params | Support

  Close | SUB | Close the stream | 0 | WXG
  CopyFrom | SUB (Stream, Bytes%) | Copy from another stream Either QFileStream or QMemoryStream If Bytes%=0 then the whole stream is copied | 2 | W
  | Use CopyFrom to copy a QFILESTREAM or a QMEMORYSTREAM to the current filestream. Details: If Bytes% = 0 then the Stream is reset to position 0 and the whole stream is then copied. Example:

  > $INCLUDE "RAPIDQ.INC"
  > DIM File1 AS QFILESTREAM
  > DIM File2 AS QFILESTREAM
  > File1.Open("test.txt", fmCreate)
  > File2.Open("oldtest.txt", fmOpenRead)
  > File1.CopyFrom(File2, 123) '-- Copy 123 bytes from File2

  ExtractRes | SUB (Resource AS LONG) | Extract resource to filestream | 1 | WXG
  | Extracts a resource from your program to the filestream. Details: The parameter Resource is not the resource handle, but the absolute position of the resource within your file. This requires that you use the keyword Resource(n) to specify the resource number.
  Example (dumping all resources):

  > $INCLUDE "RAPIDQ.INC"
  > $RESOURCE res_1 as "res.1"
  > $RESOURCE res_2 as "res.2"
  > DIM File1 AS QFILESTREAM
  > File1.Open("test.txt", fmCreate)
  > FOR I = 0 TO ResourceCount-1
  > File1.ExtractRes(Resource(I))
  > NEXT

  LoadArray | SUB (Array(), NumElements&) | Load data into array | 2 | WXG
  Open | SUB (FileName$, Method%) | Open a file, Method% see RAPIDQ.INC | 2 | WXG
  Read | SUB (variable) | Generic Read, determines the storage space and saves data in variable | 1 | WXG
  | Datasize is automatically determined, and the value is stored into the variable. Example:

  > $INCLUDE "RAPIDQ.INC"
  > DIM File1 AS QFILESTREAM
  > DIM B AS BYTE, I AS INTEGER
  > File1.Open("test.txt", fmOpenRead)
  > File1.Read(B) '-- Read a byte
  > File1.Read(I) '-- Read an integer

  ReadLine | FUNCTION () AS STRING | Reads an entire line, supports UNIX files | 0 | WXG
  ReadNum | FUNCTION (n) AS DOUBLE | Read n bytes, returns number | 1 | WXG
  ReadBinStr | FUNCTION (n) AS STRING | Read n bytes, returns the binary string | 1 | WXG
  ReadStr | FUNCTION (n) AS STRING | Read n bytes, returns the text string | 1 | WXG
  ReadUDT | SUB (MyType) | Read and store data in a MyType structure | 1 | WXG
  SaveArray | SUB (Array(), NumElements&) | Save array | 2 | WXG
  Seek | SUB (Position%, From%) | Seek to Position%, From% see RAPIDQ.INC | 2 | WXG
  Write | SUB (variable) | Generic Write, determines the storage space and saves data to file | 1 | WXG
  WriteLine | SUB (S AS STRING) | Writes string with CR+LF | 1 | WXG
  WriteNum | SUB (number, bytes%) | Writes a number to file | 2 | WXG
  WriteBinStr | SUB (string, bytes%) | Writes a binary string to file | 2 | WXG
  WriteStr | SUB (string, bytes%) | Writes a text string to file (fast) | 2 | WXG
  WriteUDT | SUB (MyType) | Write data stored in a MyType structure | 1 | WXG

  QFileStream Examples

        $INCLUDE "RAPIDQ.INC"

        DIM File AS QFileStream

        File.Open("test.bas", fmOpenRead)
        S$ = File.ReadStr(File.Size)         '' Read entire file
        PRINT S$                             '' print it
        File.Close

      '------------------------------------------------------
        $INCLUDE "RAPIDQ.INC"

        TYPE MyType
            Name AS STRING*30
            Phone AS STRING*8
            Age AS INTEGER
        END TYPE

        DIM Person AS MyType
            Person.Name = "Joe"
            Person.Phone = "555-5555"

        DIM File AS QFileStream
            File.Open("test", fmCreate)
            File.WriteUDT(Person)

  Prev Component | Contents | Next Component