Как указать конец файла в matlab

#matlab #file-io #binaryfiles

#matlab #file-io #двоичные файлы

Вопрос:

У меня есть плоский файл, сохраненный в двоичном формате, я хочу искать определенный байт и читать до конца этого файла, поэтому для этого нам нужно условие, какое условие указывает конец файла?

Кстати, я не хочу загружать весь файл, просто откройте файл и найдите нужную мне позицию, а затем прочитайте до конца файла…

Ответ №1:

fread Функция MATLAB (и, действительно, другие функции ввода-вывода файлов) автоматически определяет конец двоичного файла; нет необходимости в специальном маркере конца файла.

бесплатная документация

Общая документация по вводу-выводу 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 и прочитать, сколько байтов осталось от второго.