14.2.1 Открытие и закрытие файлов
При чтении данных из файла он должен быть сначала открыт для чтения, и аналогично при записи в файл. Функция fopen возвращает указатель на открытый файл, готовый для чтения или записи. После того, как все данные были прочитаны из или записаны в открытый файл, он должен быть закрыт. Функция fclose выполняет это. Следующий код иллюстрирует базовый шаблон для записи в файл, но очень похожий шаблон используется при чтении файла.
filename = "myfile.txt"; fid = fopen (filename, "w"); # Do the actual I/O here… fclose (fid);
- : fid = fopen (name) ¶
- : fid = fopen (name, mode) ¶
- : fid = fopen (name, mode, arch) ¶
- : fid = fopen (name, mode, arch, encoding) ¶
- : [fid, msg] = fopen (…) ¶
- : fid_list = fopen ("all") ¶
- : [file, mode, arch, encoding] = fopen (fid) ¶
-
Открыть файл для низкоуровневого ввода-вывода или запросить открытые файлы и дескрипторы файлов.
Первый вариант функции
fopenоткрывает указанный файл с заданным режимом (чтение-запись, чтение-только, и т. д.), интерпретацией архитектуры (IEEE big endian, IEEE little endian и т. д.) и кодировкой файла и возвращает целое значение, которое может быть использовано для ссылки на файл позже. Если произошла ошибка, fid устанавливается в -1, а msg содержит соответствующее системное сообщение об ошибке. Параметр mode представляет собой строку из одной или двух символов, определяющую, открывается ли файл для чтения, записи или для обоих. Параметр encoding — это строка с допустимым идентификатором кодировки. Эта кодировка используется при чтении или записи строк в файл. По умолчанию используется та же кодировка, что и для чтения файлов .m, для интерпретации пользовательских файлов.Второй вариант функции
fopenвозвращает вектор идентификаторов файлов, соответствующих всем открытым файлам, за исключением потоковstdin,stdout, иstderr.Третий вариант функции
fopenвозвращает информацию об открытом файле по его идентификатору.Например,
myfile = fopen ("splat.dat", "r", "ieee-le");открывает файл splat.dat для чтения. При необходимости двоичные числовые значения будут читаться, предполагая, что они хранятся в формате IEEE с младшим битом первым, а затем преобразуются в родную форму представления.
Открытие уже открытого файла просто открывает его снова и возвращает отдельный идентификатор файла. Открывать файл несколько раз не является ошибкой, хотя запись в один и тот же файл через несколько различных идентификаторов файлов может привести к непредсказуемым результатам.
Возможные значения параметра mode:
- ‘r’ (по умолчанию)
-
Открыть файл для чтения.
- ‘w’
-
Открыть файл для записи. Предыдущее содержимое удаляется.
- ‘a’
-
Открыть или создать файл для записи в конце файла.
- ‘r+’
-
Открыть существующий файл для чтения и записи.
- ‘w+’
-
Открыть файл для чтения или записи. Предыдущее содержимое удаляется.
- ‘a+’
Открыть или создать файл для чтения или записи в конце файла.
Добавьте
"t"к строке режима, чтобы открыть файл в текстовом режиме, или"b"— для открытия в двоичном режиме. В системах Windows чтение и запись в текстовом режиме автоматически преобразует символы перевода строки в соответствующие символы конца строки для системы (возврат каретки-перевод строки в Windows). По умолчанию, если режим не указан, используется двоичный режим.Кроме того, вы можете добавить
"z"к строке режима, чтобы открыть сжатый gzip файл для чтения или записи. Для этого также необходимо открыть файл в двоичном режиме.Параметр arch — это строка, определяющая стандартный формат данных для файла. Допустимые значения для arch:
"native"или"n"(по умолчанию)-
Формат текущей машины.
"ieee-be"или"b"-
Формат IEEE big endian.
"ieee-le"или"l"Формат IEEE little endian.
При открытии нового файла, который еще не существует, права будут установлены на
0666 - umask.Примечание по совместимости: Octave открывает файлы с использованием буферизованного ввода-вывода. Небольшие записи накапливаются до тех пор, пока внутренний буфер не заполнится, а затем все записывается в одной операции. Это очень эффективно и повышает производительность. MATLAB, однако, открывает файлы с использованием небуферизованного ввода-вывода, где каждая операция записи выполняется немедленно. Если операция записи должна быть выполнена немедленно после записи данных, то операция записи должна быть после этого сопровождаться вызовом
fflushдля сброса внутреннего буфера.См. также: fclose, fgets, fgetl, fscanf, fread, fputs, fdisp, fprintf, fwrite, fskipl, fseek, frewind, ftell, feof, ferror, fclear, fflush, freport, umask.
- : fclose (fid) ¶
- : fclose ("all") ¶
- : status = fclose ("all") ¶
-
Закрыть файл, указанный дескриптором файла fid.
Если успешно,
fcloseвозвращает 0, в противном случае — -1. Второй вариант вызоваfcloseзакрывает все открытые файлы, за исключениемstdin,stdout,stderr, и любых FIDs, связанных с gnuplot.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Opening-and-Closing-Files.html