was able to read from 2 open files, each at about 230 kbytes/sec, by alternating calling read(buffer, 512) on each.
uint32_t m = micros(); if (!card.readBlock(lbn, buf)) error("readBlock"); Serial.println(micros() - m);
Or perhaps a short list of the first dozen cluster addresses for each file? Would that allow rapid seeking within the first many kbytes of the file?
bool SdBaseFile::createContiguous ( SdBaseFile * dirFile, const char * path, uint32_t size ) Create and open a new contiguous file of a specified size.Note: This function only supports short DOS 8.3 names. See open() for more information.Parameters: [in] dirFile The directory where the file will be created. [in] path A path with a valid DOS 8.3 file name. [in] size The desired file size.Returns: The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
bool SdBaseFile::truncate ( uint32_t length ) Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.Parameters: [in] length The desired length for the file.Returns: The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.