开始与C Fopen方法
文件处理是每一种编程语言的基本部分。在几乎每个应用程序中,文件被用来保存数据或信息,这些数据或信息可以是输入、输出、数据库表信息或完成应用程序过程所需的重要数据。因此,学习文件处理是非常重要的。在文件中,数据以字节序列的形式保存。在软件应用程序中读取文件内容并将其写入文件的过程称为“文件输入/输出”(file Input and Output)。C编程语言在一个名为“stdio.h”的C标准库头文件中为文件I/O提供了许多标准库函数。一些重要的文件I/O函数是' fopen ', ' fclose ', ' fread ', ' fwrite ', ' fgets ', ' fputs ', ' fscanf '和' fprintf '。要启动任何文件I/O操作,第一个用来打开文件进行读写的方法是C ' fopen '方法。
什么是C fopen方法?
C ' fopen '方法是Unix操作系统中系统调用' open '的高级包装器。根据指定的方式创建文件或对现有文件执行文件I/O操作。
C fopen方法格式
FILE *fopen (const char *filename, const char *openmode);
在上述格式中,参数' filename '是一个指向字符串的指针,该字符串具有要打开的文件的名称。openmode参数是一个指向字符串的指针,该字符串指定程序请求的访问类型(模式)。这种模式提供了一种限制应用程序使用文件的方法。C ' fopen '返回一个FILE指针,该指针被程序用来跟踪打开的文件。
C ' fopen '方法中的不同模式
以下是“fopen”访问模式:
- 模式' r '将在文件已经存在时打开一个文件进行读取,否则将产生打开文件失败的错误。
- 模式' w '创建一个新的文件写入和销毁文件的内容时,如果已经存在。
- 模式' a '创建一个用于写入的新文件,并在文件末尾写入数据,而不会截断现有的文件数据。
- 模式' r+ '和' w+ '分别是' r '和' w '的扩展版本,并增加了读写访问权限。
- 模式' a+ '是' a '的扩展版本,并创建一个读写访问的新文件。读取从文件的开头开始,写入在现有数据的末尾完成。
可以选择使用上述模式指定一些附加字符,以实现不同类型的访问;例如' b '以二进制模式(随机访问)打开一个文本文件,但是这个特性只在基于windows的操作系统中可用。如果文件已经存在,字符' x '可以用模式' w '指定,以避免数据截断。
fopen中的“+”访问模式请求一个可以同时执行读和写的流。因此,当从读切换到写或从写切换到读时,这种类型的流需要像' fseek '这样的文件定位函数。否则,读写数据可能会以任何顺序相互混杂,因为在读写之间切换时,内部缓冲区没有被适当清空。但是,当一个文件以追加模式打开时,即使文件指针指向文件的中间(美国国家标准协会(ANSI)标准的C ' fopen '),写入操作也只能在文件的末尾执行。
如何C fopen方法工作?
在实现C ' fopen '之前,必须牢记以下要点,以避免调用该方法时出现错误:
- 当fopen中的命名文件具有' w '或' a '的访问模式时,文件及其父目录应该具有适当的权限,就像应该分配给它的写权限一样。
- 新的“fopen”调用不应该超过程序中允许打开的文件总数。
- 命名文件的大小不应该超过2GB(“fopen”限制)。
- 由于C ' fopen '支持大文件,因此请确保有足够的存储空间可用。
*文件;
int characterValue;
file = fopen (" TestFile.txt ", " r ");
if (file == NULL) {
printf("错误");
}
其他{
characterValue = fgetc(文件);
while (characterValue != EOF) {
printf (" % c”,characterValue);
characterValue = fgetc(文件);
}
}
文件关闭(文件);
在上面的代码片段中,C ' fopen '方法打开名为' TestFile.txt '的文件,模式为' r ',即只读。当文件存在时,' fopen '返回file指针成功,否则返回' NULL '并在控制台上打印' Error '。当方法成功打开文件时,' else '将执行,并在控制台中打印文件的所有字符,直到查找指针到达文件末尾(EOF)。在上面的代码中,' fgetc '方法返回文件中的单个字符,并寻找指向下一个字符的读指针。' EOF '是一个值为' -1 '的常量,它在读取时显示文件的结束。最后,' fclose '方法释放程序在执行期间持有的资源(FILE指针)。
C fopen变量' fopen64 '
FILE *fopen64 (const char *filename, const char *openmode);
C ' fopen64 '是' fopen '的一个64位变体,它有助于在32位机器上打开大于2GB (fopen限制)的文件。该方法的替代方法是' fopen ',但是源代码是用_FILE_OFFSET_BITS == 64标志编译的。
修改后的变量' freopen '
FILE * freopen (const char *filename, const char * openmode, FILE *stream)
与C ' fopen '不同,' freopen '有第三个文件流类型的参数,该参数已经在程序中打开。它关闭打开的流,重新打开它,并将它与文件关联。这类似于' fclose '和' fopen '的组合。' freopen64 '是' freopen '的一个64位变体,与' fopen '中的' fopen64 '相同。当标准输入(stdin)、输出(stdout)和错误(stderr)的开放流必须附加到文件时,“freopen”方法通常被使用。下面的代码片段演示了如何创建用于输出的日志文件(stdout)。
文件*文件句柄;
fileHandler = freopen(" output.txt ", " w+ ", stdout);
fprintf(stdout, "此文本被重定向到output.txt\n ");
文件关闭(文件句柄);