fread does not return the required length of data for large file.

4 views (last 30 days)
Hi I aim to read a region of data from a large file in binary mode, but the returned vector is of wrong length.
% a file of 3GB
aRefGenomeFaFile = 'F:\GWAS\hg19.fa';
fid = fopen(aRefGenomeFaFile,'rb+');
% read a region of 1070 bytes that skips the first 249250621 bytes
a = fread(fid,[1,1070],'uint8',249250621);
% result: a is 1x13 double, not the expected length of 1070
% try another skip length 49250621
fid = fopen(aRefGenomeFaFile,'rb+');
a = fread(fid,[1,1070],'uint8',49250621);
%result: a is 1x64 double, not the expected length of 1070
Is there something wrong with reading?
Thanks

Accepted Answer

Walter Roberson
Walter Roberson on 6 Mar 2021
% read a region of 1070 bytes that skips the first 249250621 bytes
a = fread(fid,[1,1070],'uint8',249250621);
Nooo! That means to skip that many bytes between every value! Such as you might use if you were reading rows of a 249250621 by 1070 matrix!
Ifyou want to skip to a starting position then fseek() that many bytes relative to 'bof' and do not use a skip on the fread

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!