ChucK/Dev/IO/FileIO

From CSWiki
Revision as of 12:20, 12 March 2008 by Aschran (talk | contribs)

Jump to: navigation, search
The following is subject to change.

FileIO Class

The FileIO class is a subclass of the IO class. Only elements of the FileIO class that extend or override the parent class are listed here. Only files of up to 2 GiB in size are supported by this class.

Methods

fun int open(string path[, int flags]) 
Opens the specified file, returning true on success and false otherwise. The flags can optionally be used to specify the mode in which to open the file (FileIO.MODE_READ_WRITE | FileIO.MODE_ASCII by default).
fun void seek(int pos) 
Seeks to the specified byte offset from the start of the file.
fun int tell() 
Returns the current position in the file in bytes, or -1 if a file is not open.
fun int size() 
Returns the size of the file in bytes, or -1 if a file is not open.

Directories

fun int isDir() 
Returns true if the opened file is a directory, false otherwise.
fun string[] dirList() 
Returns an array containing the names of each file in the opened directory, or an empty array if the opened file is not a directory.

Constants

FileIO.stdin
FileIO.stdout 
Pre-created files for reading from and writing to stdin and stdout.
FileIO.MODE_READ_WRITE
FileIO.MODE_READONLY
FileIO.MODE_WRITEONLY
FileIO.MODE_APPEND 
These flags can optionally be passed to the open function to specify the mode in which to open the file.
FileIO.MODE_ASCII
FileIO.MODE_BINARY 
These flags can optionally be passed to the open function to specify whether reading and writing should proceed in ASCII (readable text) or binary mode.

Examples

1. Functions to read and write an array of integers in binary mode.

fun void writeInts(int integers[], string path) {

    // open the file
    FileIO file;
    if (!file.open(path, FileIO.MODE_WRITEONLY | FileIO.MODE_BINARY))
        return; // error opening the specified file
    
    // write out the size and contents of the array
    file <- integers.size();
    for (0 => int i; i < integers.size(); i++)
        file <- integers[i];
        
    // and we're done
    file.close(); // automatically calls file.finish()

}

fun int[] readInts(string path) {
    
    // open the file
    FileIO file;
    if (!file.open(path, FileIO.MODE_READONLY | FileIO.MODE_BINARY)) {
        int ret[0]; // error opening the specified file
        return ret;
    }
    
    // read the size of the array
    file -> int size;
    file.finish(); // wait for the read to finish without advancing time
                   // before continuing
    
    // now read in the contents
    int ret[size];
    for (0 => int i; i < size; i++)
        file -> ret[i];
        
    // and we're done
    file.close(); // automatically calls file.finish()
    return ret;
    
}

2. Function to append a string to the end of a log file (uses seek and size).

fun void logAppend(FileIO log, string entry) {

    // file already given to us...make sure it is open
    if (log.isClosed())
        return;
        
    log.size() => log.seek; // move to end of file
    log <- entry <- "\n"; // write the entry, terminate with newline
    
    // don't close the file or wait for the queued I/O to
    // finish--that's up to the calling function

}