#matlab #file-io #binaryfiles
#matlab #file-io #двоичные файлы
Вопрос:
У меня есть плоский файл, сохраненный в двоичном формате, я хочу искать определенный байт и читать до конца этого файла, поэтому для этого нам нужно условие, какое условие указывает конец файла?
Кстати, я не хочу загружать весь файл, просто откройте файл и найдите нужную мне позицию, а затем прочитайте до конца файла…
Ответ №1:
fread
Функция MATLAB (и, действительно, другие функции ввода-вывода файлов) автоматически определяет конец двоичного файла; нет необходимости в специальном маркере конца файла.
Комментарии:
1. В качестве дополнения к ответу Сэма вы можете проверить функцию Matlab
feof
, которая проверяет конец файла.
Ответ №2:
Вы можете использовать feof для проверки конца файла. Например, для чтения файла по одному символу за раз:
fid = fopen('bench.dat');
k = 0;
while ~feof(fid)
curr = fscanf(fid,'%c',1);
if ~isempty(curr)
k = k 1;
benchstr(k) = curr;
end
end
fclose(fid);
Ответ №3:
Вы можете передать Inf
аргумент size при использовании функции FREAD (будет считываться до конца файла). Вот пример:
%# first lets create a simple binary file
fid = fopen('file.bin', 'wb');
fwrite(fid, 'hello world', 'char*1');
fclose(fid);
%# now open binary file, seek to some position, and read bytes till EOF
fid = fopen('file.bin', 'rb');
fseek(fid, 6, 'bof'); %# go to the 7th byte
B = fread(fid, Inf, 'uint8=>char'); %# read bytes until end-of-file (as chars)
fclose(fid);
disp(B)
Комментарии:
1. вы правы, но, к ВАШЕМУ сведению, функция fseek будет искать позицию в (бит), а не в байтах… но посмотрите, чего я действительно хочу? у меня есть 2 файла, я хочу прочитать, например, 1000 байт, поэтому из первого файла он должен считываться с конца файла, например, с 500 байта до последнего (не все время, но иногда зависит от того, что указывает пользователь), поэтому, если то, что он прочитал, меньше 1000, оно должно идтиперейдите к следующему файлу и заполните остальные байты… итак, в этом случае, как я могу это сделать?
2. на самом деле FSEEK выполняет смещение в байтах , а не в битах (просто прочитайте страницу документации)… Что касается вашего другого вопроса, вы можете просто проверить длину данных, считанных из первого файла, вычесть количество из 1000 и прочитать, сколько байтов осталось от второго.