В файле не найден требуемый идентификатор конца файла, возможно, неверно указана кодировка файла

Обновлено: 03.07.2024

fileID = fopen(filename) открывает файл filename для двоичного чтения и возвращает целочисленный идентификатор файла, равный или больший 3. MATLAB® резервирует идентификаторы файлов 0, 1 и 2 для стандартного ввода, стандартного вывода. (экран) и стандартная ошибка соответственно.

Если fopen не может открыть файл, тогда fileID равен -1 .

fileID = fopen(имя файла, разрешение) открывает файл с типом доступа, указанным в разрешении.

fileID = fopen(имя файла, разрешение, machinefmt, encodingIn) дополнительно указывает порядок чтения или записи байтов или битов в файле с использованием аргумента machinefmt. Необязательный аргумент encodingIn указывает схему кодировки символов, связанную с файлом.

[fileID,errmsg] = fopen( ___ ) дополнительно возвращает зависящее от системы сообщение об ошибке, если fopen не удается открыть файл. В противном случае errmsg является пустым вектором символов. Вы можете использовать этот синтаксис с любым из входных аргументов предыдущих синтаксисов.

fIDs = fopen('all') возвращает вектор-строку, содержащую идентификаторы всех открытых файлов. Идентификаторы, зарезервированные для стандартного ввода, вывода и ошибок, не включены. Количество элементов в векторе равно количеству открытых файлов.

filename = fopen(fileID) возвращает имя файла, которое использовалось предыдущим вызовом fopen при открытии файла, указанного в fileID. Имя выходного файла преобразуется в полный путь. Функция fopen не считывает информацию из файла для определения выходного значения.

[filename,permission,machinefmt,encodingOut] = fopen(fileID) дополнительно возвращает разрешение, машинный формат и кодировку, которые использовались предыдущим вызовом fopen при открытии указанного файла. Если файл был открыт в двоичном режиме, разрешение включает букву «b». Выход encodingOut представляет собой стандартное имя схемы кодирования. fopen не считывает информацию из файла для определения этих выходных значений. Недопустимый идентификатор файла возвращает пустые векторы символов для всех выходных аргументов.

Примеры

Открыть файл и передать идентификатор функции ввода/вывода файла

Откройте файл и передайте идентификатор файла функции fgetl для чтения данных.

Откройте файл tsunamis.txt и получите идентификатор файла.

Передайте идентификатор файла функции fgetl, чтобы прочитать одну строку из файла.

Запрос имени файла для открытия

Создайте приглашение, чтобы запросить имя открываемого файла. Если fopen не может открыть файл, отобразите соответствующее сообщение об ошибке.

Открыть файл для записи и указать тип доступа, порядок записи, кодировку символов

Открыть файл для записи в файл с использованием кодировки символов Shift-JIS.

Ввод 'w' указывает доступ для записи, ввод 'n' указывает собственный порядок байтов, а 'Shift_JIS' указывает схему кодирования символов.

Получить информацию об открытых файлах

Предположим, вы ранее открыли файл с помощью fopen .

Получить идентификаторы всех открытых файлов.

Получить имя файла и кодировку символов для открытого файла. Используйте ~ вместо выходных аргументов, которые вы хотите опустить.

Выходные данные, показанные здесь, являются репрезентативными. Ваши результаты могут отличаться.

Входные аргументы

filename — Имя файла, чтобы открыть
вектор символов или строковый скаляр

Имя файла, чтобы открыться в виде вектора символов или строкового скаляра, который включает расширение файла.

В системах UNIX®, если имя файла начинается с '~/' или '~ username /' , функция fopen расширяет путь к домашнему каталогу текущего или указанного пользователя соответственно.

В зависимости от расположения файла имя файла может принимать одну из следующих форм.

Укажите имя файла в имени файла .

Если вы открываете файл с доступом для чтения, а файл находится не в текущей папке, то fopen выполняет поиск по пути поиска MATLAB.

Если вы открываете файл с доступом для записи или добавления, а файл находится не в текущей папке, то fopen создает файл в текущем каталоге.

Пример: 'sample_file.txt'

Если файл не находится в текущей папке или в папке по пути MATLAB, укажите полное или относительное имя пути в имени файла.

Пример: 'C:\myFolder\myFile.sample_file.txt'

Пример: 'myFolder\sample_file.txt'

Если файл хранится в удаленном месте, то имя файла должно содержать полный путь к файлу, указанному в виде универсального указателя ресурса (URL) в следующем формате:

имя_схемы :// путь_к_файлу / мой_файл.ext

В зависимости от вашего удаленного местоположения имя_схемы может быть одним из значений в этой таблице.

Удаленное расположение имя_схемы
Amazon S3™ s3
Хранилище больших двоичных объектов Windows Azure® wasb , wasbs
HDFS™ hdfs

Если вы используете облачную файловую систему, установите переменные среды для связи с удаленной файловой системой. Дополнительные сведения см. в разделе Работа с удаленными данными.

Файлы в томе распределенной файловой системы Hadoop (HDFS) нельзя открыть в режиме чтения-записи.

Пример: 's3://bucketname/path_to_file/sample_file.txt'

Пример: 'myFile.txt'

Типы данных: char | строка

permission — Тип доступа к файлу
'r' (по умолчанию) | 'ш' | а | 'г+' | 'ш+' | 'а+' | «А» | 'В' | .

Тип доступа к файлу в виде вектора символов или строкового скаляра. Вы можете открыть файл в двоичном режиме или в текстовом режиме. В системах UNIX оба режима перевода имеют одинаковый эффект. Чтобы открыть файл в двоичном режиме, укажите один из следующих параметров.

Открыть файл для чтения.

Откройте или создайте новый файл для записи. Отменить существующее содержимое, если оно есть.

Откройте или создайте новый файл для записи. Добавить данные в конец файла.

Открыть файл для чтения и записи.

Откройте или создайте новый файл для чтения и записи. Отменить существующее содержимое, если оно есть.

Откройте или создайте новый файл для чтения и записи. Добавить данные в конец файла.

Открыть файл для добавления без автоматической очистки текущего выходного буфера.

Открыть файл для записи без автоматической очистки текущего выходного буфера.

Чтобы открывать файлы в текстовом режиме, добавьте букву "t" к аргументу разрешения, например "rt" или "wt+".

В системах Windows® в текстовом режиме:

Операции чтения, которые сталкиваются с возвратом каретки, за которым следует символ новой строки ( '\r\n' ), удаляют возврат каретки из ввода.

Операции записи вставляют возврат каретки перед любым символом новой строки в выводе.

Откройте или создайте новый файл в текстовом режиме, если вы хотите записать в него запись в MATLAB, а затем откройте его в Microsoft® Notepad или в любом текстовом редакторе, который не распознает '\n' как последовательность новой строки. При записи в файл заканчивайте каждую строку символом '\r\n' . Например, см. fprintf. В противном случае открывайте файлы в двоичном режиме для повышения производительности.

Чтобы читать и писать в один и тот же файл:

Откройте файл со значением разрешения, которое включает знак "плюс", "+".

Вызывайте fseek или frewind между операциями чтения и записи. Например, не вызывайте fread, за которым следует fwrite, или fwrite, за которым следует fread, если между ними не вызывается fseek или frewind.

Открывает файл. Эти версии fopen , _wfopen имеют улучшения безопасности, как описано в разделе «Функции безопасности» в CRT.

Синтаксис

Параметры

pFile
Указатель на указатель файла, который получит указатель на открытый файл.

режим
Разрешенный тип доступа.

Возвращаемое значение

Ноль в случае успеха; код ошибки при сбое. Дополнительные сведения об этих кодах ошибок см. в разделах errno , _doserrno , _sys_errlist и _sys_nerr .

Состояния ошибки

< td>любой
pFile имя файла режим Возвращаемое значение Содержимое pFile
NULL любой EINVAL без изменений
любой NULL любой EINVAL без изменений
любой любой NULL EINVAL без изменений

Примечания

Файлы, открытые с помощью fopen_s и _wfopen_s, не подлежат совместному использованию. Если вам требуется, чтобы файл был доступен для совместного использования, используйте _fsopen , _wfsopen с соответствующей константой режима общего доступа, например _SH_DENYNO для общего доступа для чтения/записи.

Функция fopen_s открывает файл, указанный в имя_файла. _wfopen_s — это расширенная версия fopen_s; аргументы _wfopen_s представляют собой строки расширенных символов. В остальном _wfopen_s и fopen_s ведут себя одинаково.

fopen_s принимает пути, действительные в файловой системе на момент выполнения; Пути UNC и пути, включающие подключенные сетевые диски, принимаются fopen_s, если система, выполняющая код, имеет доступ к общему ресурсу или подключенному сетевому диску во время выполнения. При создании путей для fopen_s не делайте предположений о доступности дисков, путей или общих сетевых ресурсов в среде выполнения. В качестве разделителей каталогов в пути можно использовать либо прямую косую черту (/), либо обратную косую черту (\).

Эти функции проверяют свои параметры. Если pFile , filename или mode является нулевым указателем, эти функции генерируют исключение недопустимого параметра, как описано в разделе Проверка параметров.

Всегда проверяйте возвращаемое значение, чтобы убедиться, что функция завершилась успешно, прежде чем выполнять какие-либо дальнейшие операции с файлом. При возникновении ошибки возвращается код ошибки и устанавливается глобальная переменная errno. Дополнительные сведения см. в разделах errno , _doserrno , _sys_errlist и _sys_nerr .

По умолчанию глобальное состояние этой функции ограничено приложением. Чтобы изменить это, см. Глобальное состояние в CRT.

Поддержка Юникода

fopen_s поддерживает файловые потоки Unicode. Чтобы открыть новый или существующий файл Unicode, передайте флаг ccs, указывающий нужную кодировку, в fopen_s :

Допустимыми значениями кодировки являются UNICODE , UTF-8 и UTF-16LE . Если для encoding не указано значение, fopen_s использует кодировку ANSI.

Если файл уже существует и открыт для чтения или добавления, метка порядка байтов (BOM), если она присутствует в файле, определяет кодировку. Кодировка спецификации имеет приоритет над кодировкой, указанной флагом ccs. Кодировка ccs используется только при отсутствии спецификации или если файл является новым файлом.

Обнаружение спецификации применяется только к файлам, открытым в режиме Unicode; то есть путем передачи флага ccs.

В следующей таблице приведены режимы для различных флагов ccs, заданных для fopen_s, и для меток порядка байтов в файле.

Используемые кодировки на основе флага ccs и спецификации

< /tr>
флаг ccs Нет спецификации (или нового файла) Спецификация: UTF-8 Спецификация: UTF-16< /th>
UNICODE UTF-8 UTF-8 UTF- 16LE
UTF-8 UTF-8 UTF-8 UTF-16LE
UTF-16LE UTF-16LE UTF-8 UTF-16LE

В файлы, открытые для записи в режиме Unicode, автоматически записывается спецификация.

Если режим равен "a, ccs= encoding " , fopen_s сначала пытается открыть файл как с правами чтения, так и с правами записи. В случае успеха функция считывает спецификацию, чтобы определить кодировку файла; в случае неудачи функция использует для файла кодировку по умолчанию. В любом случае fopen_s повторно открывает файл с доступом только для записи. (Это относится только к режиму, а не к + .)

Обычные сопоставления текстов

Строка символов mode определяет тип доступа, запрашиваемый для файла, следующим образом.

Подпрограмма TCHAR.H _UNICODE & _MBCS не определена _MBCS определена _UNICODE определена
_tfopen_s fopen_s fopen_s _wfopen_s
режим Доступ
" r" Открывается для чтения. Если файл не существует или не может быть найден, вызов fopen_s завершается ошибкой.
"w" Открывает пустой файл для записи. Если данный файл существует, его содержимое уничтожается.
"a" Открывается для записи в конец файла (дополнение) без удаления маркер конца файла (EOF) перед записью новых данных в файл. Создает файл, если он не существует.
"r+" Открывается как для чтения, так и для записи. Файл должен существовать.
"w+" Открывает пустой файл как для чтения, так и для записи. Если файл существует, его содержимое уничтожается.
"a+" Открывается для чтения и добавления. Операция добавления включает удаление маркера EOF перед записью новых данных в файл. Маркер EOF не восстанавливается после завершения записи. Создает файл, если он не существует.

Когда файл открывается с использованием типа доступа "a" или "a+", все операции записи выполняются в конце файла. Указатель файла можно переместить с помощью fseek или rewind , но он всегда перемещается обратно в конец файла перед выполнением любой операции записи, чтобы существующие данные нельзя было перезаписать.

Режим "a" не удаляет маркер EOF перед добавлением в файл. После добавления команда MS-DOS TYPE показывает только данные до исходного маркера EOF, а не данные, добавленные к файлу. Режим «a+» удаляет маркер EOF перед добавлением в файл. После добавления команда MS-DOS TYPE показывает все данные в файле. Режим "a+" требуется для добавления к потоковому файлу, который завершается маркером CTRL+Z EOF.

Если указан тип доступа "r+", "w+" или "a+", разрешены как чтение, так и запись. (Говорят, что файл открыт для «обновления».) Однако, когда вы переключаетесь с чтения на запись, операция ввода должна встретить маркер EOF. Если маркера EOF нет, вы должны использовать промежуточный вызов функции позиционирования файла. Функции позиционирования файла — это fsetpos, fseek и rewind.Когда вы переключаетесь с записи на чтение, вы должны использовать промежуточный вызов либо fflush, либо функции позиционирования файла.

Начиная с C11, вы можете добавить "x" к "w" или "w+", чтобы вызвать сбой функции, если файл существует, вместо того, чтобы перезаписывать его.

Помимо приведенных выше значений, следующие символы могут быть включены в mode, чтобы указать режим перевода для символов новой строки:

режим модификатор режим перевода
t Открыть в текстовом (переведенном) режиме.
b Открыть в двоичном (непереведенном) режиме; переводы, включающие символы возврата каретки и перевода строки, подавляются.

В текстовом (переведенном) режиме сочетание клавиш CTRL+Z при вводе интерпретируется как символ конца файла. В файлах, открытых для чтения/записи с помощью "a+", fopen_s проверяет наличие CTRL+Z в конце файла и удаляет его, если это возможно. Это сделано потому, что использование fseek и ftell для перемещения по файлу, оканчивающемуся на CTRL+Z, может привести к неправильному поведению fseek ближе к концу файла.

Кроме того, в текстовом режиме комбинации возврата каретки/перевода строки при вводе преобразуются в одиночные переводы строки, а символы перевода строки при выводе преобразуются в комбинации возврата каретки и перевода строки. Когда функция потокового ввода-вывода Unicode работает в текстовом режиме (по умолчанию), предполагается, что исходный или целевой поток представляет собой последовательность многобайтовых символов. Функции потокового ввода Unicode преобразуют многобайтовые символы в расширенные символы (как при вызове функции mbtowc). По той же причине функции потокового вывода Unicode преобразуют расширенные символы в многобайтовые (как при вызове функции wctomb).

Если t или b не заданы в mode , режим перевода по умолчанию определяется глобальной переменной _fmode. Если перед аргументом стоит префикс t или b, функция завершается ошибкой и возвращает NULL .

Дополнительную информацию об использовании текстового и двоичного режимов в Unicode и многобайтовом потоковом вводе-выводе см. в разделах Текстовый и двоичный режим файлового ввода-вывода и Unicode Stream I/O в текстовом и двоичном режимах.

режим модификатор Поведение
c Включите флаг фиксации для связанного имени файла, чтобы содержимое файлового буфера записывалось непосредственно на диск при вызове fflush или _flushall.
n Сбросьте флаг фиксации для связанного имени файла на «без фиксации». Это значение по умолчанию. Он также переопределяет глобальный флаг фиксации, если вы связываете свою программу с COMMODE.OBJ. По умолчанию глобальный флаг фиксации имеет значение "no-commit", если вы явно не свяжете свою программу с COMMODE.OBJ (см. Параметры связывания).
n Указывает что файл не наследуется дочерними процессами.
S Указывает, что кэширование оптимизировано для последовательного доступа с диска, но не ограничивается им.
R Указывает, что кэширование оптимизировано для произвольного доступа с диска, но не ограничивается им.
t Определяет файл как временный. Если возможно, он не сбрасывается на диск.
D Определяет файл как временный. Он удаляется при закрытии последнего указателя файла.
ccs= encoding Указывает используемый кодированный набор символов (один из UTF-8 , UTF-16LE или UNICODE ) для этого файла. Оставьте неуказанным, если вы хотите использовать кодировку ANSI.

Допустимые символы для строки mode, используемой в fopen_s и _fdopen, соответствуют аргументам oflag, используемым в _open и _sopen , следующим образом.

< td> _O_UTF8
Символы в режиме строка Эквивалентное значение oflag для _open / _sopen
a _O_WRONLY | _O_APPEND (обычно _O_WRONLY | _O_CREAT | _O_APPEND )
a+ _O_RDWR | _O_APPEND (обычно _O_RDWR | _O_APPEND | _O_CREAT )
R _O_RDONLY
r+ _O_RDWR
w _O_WRONLY (обычно _O_WRONLY | _O_CREAT | _O_TRUNC)
w+ _O_RDWR (обычно _O_RDWR | _O_CREAT | _O_TRUNC)
b _O_BINARY
t _O_TEXT
c Нет
n Нет
S _O_SEQUENTIAL
R _O_RANDOM
t _O_SHORTLIVED
D _O_TEMPORARY
ccs=UNICODE _O_WTEXT
ccs=UTF-8
ccs=UTF-16LE _O_UTF16

Если вы используете режим rb, файлы Win32 с отображением памяти также могут быть вариантом, если вам не нужно портировать свой код, вы собираетесь читать большую часть файла или вас не волнует производительность сети.

Требования

< tr>
Функция Обязательный заголовок
fopen_s
_wfopen_s или

Дополнительную информацию о совместимости см. в разделе Совместимость.

Библиотеки

Параметры c , n и t mode являются расширениями Microsoft для fopen_s и _fdopen и не должны использоваться там, где требуется переносимость ANSI.

fopen() привязывает именованный ресурс, заданный именем файла, к потоку.

Параметры

Если имя файла имеет форму "scheme://. ", предполагается, что это URL-адрес, и PHP будет искать обработчик протокола (также известный как оболочка) для этой схемы. Если для этого протокола не зарегистрированы оболочки, PHP выдаст уведомление, чтобы помочь вам отследить потенциальные проблемы в сценарии, а затем продолжит работу, как если бы имя файла указывает на обычный файл.

Если PHP решил, что имя файла указывает на локальный файл, он попытается открыть поток для этого файла. Файл должен быть доступен для PHP, поэтому вам необходимо убедиться, что права доступа к файлу разрешают этот доступ. Если вы включили open_basedir, могут применяться дополнительные ограничения.

Если PHP решил, что имя файла указывает зарегистрированный протокол, и этот протокол зарегистрирован как сетевой URL, PHP проверит, включен ли параметр allow_url_fopen. Если он выключен, PHP выдаст предупреждение и вызов fopen завершится ошибкой.

На платформе Windows будьте осторожны, избегайте обратной косой черты, используемой в пути к файлу, или используйте прямую косую черту.

Параметр режима указывает тип доступа, который вам требуется к потоку. Это может быть любое из следующего:

Список возможных режимов для fopen() с использованием режима < tbody >
mode Description
'r' Открыть только для чтения; поместите указатель файла в начало файла.
'r+' Открыть для чтения и записи; поместите указатель файла в начало файла.
'w' Открыть только для записи; поместите указатель файла в начало файла и обрежьте файл до нулевой длины. Если файл не существует, попытайтесь его создать.
'w+' Открыть для чтения и записи; в противном случае он имеет то же поведение, что и 'w' .
'a' Открыть только для записи; поместите указатель файла в конец файла. Если файл не существует, попытайтесь его создать. В этом режиме fseek() не действует, записи всегда добавляются.
'a+' Открыть для чтения и записи; поместите указатель файла в конец файла. Если файл не существует, попытайтесь его создать. В этом режиме fseek() влияет только на позицию чтения, записи всегда добавляются.
'x' Создать и открыть только для записи; поместите указатель файла в начало файла. Если файл уже существует, вызов fopen() потерпит неудачу, вернув false и сгенерировав ошибку уровня E_WARNING. Если файл не существует, попытайтесь его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для базового системного вызова open(2).
'x+' Создать и открыть для чтения и записи ; в противном случае он имеет то же поведение, что и 'x' .
'c' Открыть файл только для записи. Если файл не существует, он создается. Если он существует, он не усекается (в отличие от 'w'), и вызов этой функции не завершается ошибкой (как в случае с 'x'). Указатель файла располагается в начале файла. Это может быть полезно, если желательно получить рекомендательную блокировку (см. flock() ) перед попыткой изменить файл, так как использование 'w' может обрезать файл до того, как будет получена блокировка (если требуется усечение, ftruncate() может быть используется после запроса блокировки).
'c+' Открыть файл для чтения и записи; в противном случае он имеет то же поведение, что и 'c' .
'e' Установить флаг закрытия при выполнении в дескрипторе открытого файла. Доступно только в PHP, скомпилированном в системах, соответствующих стандарту POSIX.1-2008.

Примечание.

Разные семейства операционных систем имеют разные правила окончания строки. Когда вы пишете текстовый файл и хотите вставить разрыв строки, вам нужно использовать правильные символы конца строки для вашей операционной системы. Системы на базе Unix используют \n в качестве символа конца строки, системы на базе Windows используют \r\n в качестве символов окончания строки, а системы на базе Macintosh (Mac OS Classic) используют \r в качестве символа окончания строки.

Если вы используете неправильные символы окончания строки при написании файлов, вы можете обнаружить, что другие приложения, открывающие эти файлы, будут «выглядеть забавно».

Windows предлагает флаг перевода текстового режима ( 't' ), который прозрачно переводит \n в \r\n при работе с файлом. Напротив, вы также можете использовать 'b' для принудительного двоичного режима, который не будет преобразовывать ваши данные. Чтобы использовать эти флаги, укажите «b» или «t» в качестве последнего символа параметра режима.

Режим перевода по умолчанию — «b». Вы можете использовать режим 't', если вы работаете с текстовыми файлами и используете \n для разделения окончаний строк в своем скрипте, но ожидайте, что ваши файлы будут доступны для чтения в таких приложениях, как старые версии блокнота. Вы должны использовать 'b' во всех остальных случаях.

Если вы укажете флаг 't' при работе с двоичными файлами, у вас могут возникнуть странные проблемы с вашими данными, включая поврежденные файлы изображений и странные проблемы с \r\n символов.

Примечание:

Для обеспечения переносимости также настоятельно рекомендуется переписать код, использующий или зависящий от режима 't', чтобы вместо него использовались правильные окончания строк и режим 'b'.

Примечание. Этот режим игнорируется для обработчиков потоков php://output, php://input, php://stdin, php://stdout, php://stderr и php://fd. .

Необязательный третий параметр use_include_path может иметь значение 1 или true, если вы хотите искать файл и в include_path.

A = fread(fileID) считывает данные из открытого двоичного файла в вектор-столбец A и устанавливает указатель файла на маркер конца файла. Бинарный файл обозначается идентификатором файла, fileID. Используйте fopen, чтобы открыть файл и получить значение fileID. Когда вы закончите чтение, закройте файл, вызвав fclose(fileID) .

A = fread( fileID , sizeA ) считывает данные файла в массив A с размерами sizeA и позиционирует указатель файла после последнего прочитанного значения. fread заполняет A в порядке столбцов.

A = fread(fileID, точность) интерпретирует значения в файле в соответствии с формой и размером, описываемыми точностью.

A = fread(fileID, sizeA, точность) считывает данные файла в массив A с размерами sizeA и размещает указатель файла после последнего прочитанного значения. fread заполняет A в порядке столбцов. Значения интерпретируются в файле в соответствии с формой и размером, описываемыми точностью .

A = fread( ___ , skip ) пропускает количество байтов или битов, указанное параметром skip, после чтения каждого значения в файле.

A = fread( ___ , machinefmt ) дополнительно указывает порядок чтения байтов или битов в файле.

[ A , count ] = fread( ___ ) дополнительно возвращает количество символов, которые fread считывает в A . Вы можете использовать этот синтаксис с любым из входных аргументов предыдущих синтаксисов.

Примеры

Прочитать весь файл данных uint8

Запишите вектор из девяти элементов в образец файла девять.bin .

fread возвращает вектор-столбец с одним элементом для каждого байта в файле.

Просмотреть информацию об А .

Чтение всего файла данных двойной точности

Создайте файл с именем doubledata.bin , содержащий девять значений двойной точности.

Откройте файл doubledata.bin и считайте данные в файле в массив 3 на 3, A . Укажите, что исходные данные относятся к классу double .

Чтение выбранных строк или столбцов из файла

Создайте файл с именем девять.bin , содержащий значения от 1 до 9. Запишите данные как значения uint16.

Прочитайте первые шесть значений в массив 3 на 2. Укажите, что исходные данные относятся к классу uint16 .

fread возвращает массив, заполненный по столбцам первыми шестью значениями из файла девять.bin .

Вернуться к началу файла.

Чтение двух значений за раз и пропуск одного значения перед чтением следующих значений. Укажите этот формат, используя значение точности '2*uint16' . Поскольку данные относятся к классу uint16, одно значение представлено двумя байтами. Поэтому укажите аргумент пропуска равным 2 .

fread возвращает массив 2 на 3, заполненный по столбцам значениями из nine.bin .

Чтение цифр двоично-десятичных значений

Создайте файл с двоично-десятичными значениями (BCD).

Читать по 1 байту за раз.

Отображение значений BCD.

Вернуться к началу файла с помощью frewind . Если вы читаете по 4 бита за раз в системе с прямым порядком байтов, ваши результаты отображаются в неправильном порядке.

Вернуться к началу файла с помощью frewind . Считывайте данные по 4 бита за раз, как и раньше, но указывайте обратный порядок байтов для отображения правильных результатов.

Входные аргументы

fileID — Идентификатор файла
целое число

Идентификатор файла открытого двоичного файла в виде целого числа. Прежде чем читать файл с помощью fread, вы должны использовать fopen, чтобы открыть файл и получить идентификатор файла.

Типы данных: двойной

sizeA — Размеры выходного массива
Inf (по умолчанию) | целое число | двухэлементный вектор-строка

Размеры выходного массива A в виде Inf , целого числа или двухэлементного вектора-строки.

Форма ввода sizeAРазмеры выходного массива, A
Inf Вектор-столбец, каждый элемент которого содержит значение в файле.
n Столбец вектор с n элементами.
[m,n] m - n матрица, заполненная в порядке столбцов. n может быть Inf , а m — нет.

precision — Класс и размер значений для чтения
'uint8=>double' (по умолчанию) | вектор символов или строковый скаляр

Класс и размер в битах значений, чтобы прочитать в виде вектора символов или строкового скаляра в одной из следующих форм. Опционально вход определяет класс выходной матрицы, A .

Прочитайте N значений, прежде чем пропустить количество байтов, указанное аргументом пропуска.
Пример: '4*int8'

В следующей таблице показаны возможные значения для исходного и выходного .

Тип char MATLAB® не имеет фиксированного размера, а количество байтов зависит от схемы кодирования, связанной с файлом. Установите кодировку с помощью fopen .

Для большинства значений source , если fread достигает конца файла до чтения полного значения, он не возвращает результат для конечного значения. Однако, если source является битом n или ubit n , то fread возвращает частичный результат для конечного значения.

Примечание

Чтобы сохранить значения NaN и Inf в MATLAB, считывайте и записывайте данные класса double или single .

Типы данных: char | строка

skip — Количество байтов для пропуска
0 (по умолчанию) | скаляр

Количество байтов, чтобы пропустить после чтения каждого значения в виде скаляра. Если вы указываете точность в битах n или ubit n , укажите пропуск в битах.

Используйте аргумент пропуска для чтения данных из несмежных полей в записях фиксированной длины.

machinefmt — Порядок чтения байтов
'n' (по умолчанию) | 'б' | 'л' | 'с' | а | .

Порядок чтения байтов в файле в виде вектора символов или строкового скаляра. Укажите machinefmt в качестве одного из значений в следующей таблице. Для точности бит n и ubit n, machinefmt указывает порядок чтения битов в байте, но порядок чтения байтов остается вашим системным порядком байтов.

Ваш системный порядок байтов (по умолчанию)

С обратным порядком байтов, 64-битный тип данных

С прямым порядком байтов, 64-битный тип данных

По умолчанию все поддерживаемые в настоящее время платформы используют обратный порядок байтов для новых файлов. Существующие двоичные файлы могут использовать как прямой, так и прямой порядок байтов.

Типы данных: char | строка

Выходные аргументы

A — Данные файла
вектор-столбец | матрица

Данные файла, возвращенные как вектор-столбец. Если вы указали аргумент sizeA, то A является матрицей указанного размера. Данные в A относятся к классу double, если вы не укажете другой класс в аргументе точности.

count — Количество прочитанных символов
скалярно

Количество прочитанных символов, возвращенное как скалярное значение.

Расширенные возможности

Генерация кода C/C++
Создайте код C и C++ с помощью MATLAB® Coder™.

Примечания и ограничения по использованию:

Точность входного аргумента должна быть константой.

Исходный и выходной классы, для которых задана точность, не могут иметь следующие значения: 'long' , 'ulong' , 'unsigned long' , 'bit n' или 'ubit n ' ​​.

Вы не можете использовать ввод machinefmt.

Если источник или выходные данные, для которых указана точность, относятся к типу C, например, int , то целевые и рабочие размеры для этого типа должны:

Сопоставление непосредственно с типом MATLAB.

Тип источника, указанный с точностью, должен напрямую сопоставляться с типом C на целевом оборудовании.

Если вызов fread считывает весь файл, то все данные должны помещаться в самый большой массив, доступный для генерации кода.

Если sizeA не является константой или содержит неконечный элемент, требуется динамическое выделение памяти.

Генератор кода для функции fread обрабатывает значение char для источника или вывода как 8-битное целое число со знаком. Используйте только значения от 0 до 127.

Сгенерированный код не сообщает об ошибках чтения файлов. Следовательно, вы должны написать свою собственную обработку ошибок чтения файла в коде MATLAB. В своем коде обработки ошибок рассмотрите возможность проверки того, что количество прочитанных байтов соответствует количеству запрошенных байтов. Например:

Читайте также: