从文件中读取数据时,必须先打开它进行读取;同样地,在写入文件时也必须打开它。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) ¶打开一个文件进行低级I/O操作,或查询打开的文件和文件描述符。
第一种形式的fopen函数使用指定的模式(读写、只读等)、体系结构解释(IEEE 大端、IEEE 小端等)和文件编码打开命名文件,并返回一个整数值,该整数值可用于以后引用该文件。如果发生错误,fid被设置为-1,并且msg包含相应的系统错误消息。mode是一个一或两个字符的字符串,用于指定是打开文件进行读取、写入还是同时打开文件。encoding是具有有效编码标识符的字符串。当从文件中读取或向文件中写入字符串时,将使用此编码。默认情况下,这是UTF-8。
第二种形式的fopen函数返回一个文件ID的向量,该向量对应于当前打开的所有文件,不包括stdin、stdout和stderr流。
第三种形式的fopen函数返回有关给定文件ID的打开文件的信息。
例如,
myfile = fopen ("splat.dat", "r", "ieee-le");
打开文件splat.dat用于读取。如有必要,将读取二进制数值,假设它们是以IEEE 754格式存储且最低有效位在前,然后转换为本机表示。
打开一个已经打开的文件只需再次打开它并返回一个单独的文件ID。多次打开一个文件不是错误,尽管通过几个不同的文件ID写入同一个文件可能会产生意外的结果。
mode的可能值是
打开一个文件进行读取。
打开一个文件进行写入。先前的内容将被丢弃。
打开或创建一个文件以在文件末尾进行写入。
打开现有文件进行读写操作。
打开一个文件进行读取或写入。先前的内容将被丢弃。
打开或创建一个文件,以便在文件末尾进行读取或写入。
在模式字符串中附加一个"t"以文本模式打开文件,或附加一个"b"以二进制模式打开文件。在Windows系统上,文本模式的读取和写入会自动将换行符转换为系统的适当换行符(在Windows上为回车换行符)。未指定模式时的默认值为二进制。
此外,您可以在模式字符串中附加一个"z"以打开一个gzip压缩的文件进行读取或写入。若要成功执行此操作,还必须以二进制模式打开文件。
参数arch是一个字符串,指定文件的默认数据格式。arch的有效值是
"native"或"n"(默认)当前计算机的格式。
"ieee-be"或"b"IEEE 大端格式。
"ieee-le"或"l"IEEE 小端格式。
打开尚不存在的新文件时,权限将被设置为0666 - umask。
兼容性说明:Octave使用缓冲I/O打开文件。小的写入操作会累积,直到内部缓冲区填满,然后在一次操作中写入所有内容。这非常高效,并提高了性能。MATLAB 则使用刷新I/O打开文件,每次写操作都会立即执行。如果需要在数据写入后立即执行写操作,则应在写操作后调用fflush来刷新内部缓冲区。
另请参阅: fclose, fgets, fgetl, fscanf, fread, fputs, fdisp, fprintf, fwrite, fskipl, fseek, frewind, ftell, feof, ferror, fclear, fflush, freport, umask.
status = fclose (fid) ¶status = fclose ("all") ¶关闭由文件描述符fid指定的文件。
如果成功,fclose返回0,否则返回-1。第二种形式的fclose调用关闭所有打开的文件,除了stdin、stdout、stderr以及与gnuplot相关的任何FID。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4