well if the problem is writing large amounts of data in a row, why don't you split it ? for example, start at &cVisTable[0] and write 500 bytes. Then start at &cVisTable[500] and write another 500 bytes. Then start at &cVisTable[1000] and do this again and again until you've reached the end of cVisTable, that is, iSize.
Also please note that with fread() and fwrite() there is a difference between:
fread(cVisTable, iSize, 1, rbl);
and
fread(cVisTable, 1, iSize, rbl);
in the first case you read ONE block of iSize bytes in a row, in the second case you read iSize times one byte, calling the file I/O subroutines iSize times. You might want to read smaller blocks but in a greater amount...
