C 读取文件
读取文件
在上一章中,我们在 fopen()
函数中使用 w
和 a
模式写入文件。
要读取文件,您可以使用 r
模式:
实例
FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r");
这将使 filename.txt 文件以读取模式打开。
在 C 语言中读取文件需要一些工作。坚持下去!我们将逐步指导你。
接下来,我们需要创建一个足够大的字符串来存储文件的内容。
例如,让我们创建一个可以存储最多 100 个字符的字符串:
实例
FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); // 存储文件的内容 char myString[100];
为了读取 filename.txt 的内容,我们可以使用 fgets()
函数。
fgets()
函数采用三个参数:
实例
fgets(myString, 100, fptr);
- 第一个参数指定在哪里存储文件内容,它将存储在我们刚刚创建的
myString
数组中。 - 第二个参数指定要读取的数据的最大大小,它应该与
myString
的大小(100
)相匹配。 - 第三个参数需要一个用于读取文件的文件指针(在我们的示例中为
fptr
)。
现在,我们可以打印字符串,这将输出文件的内容:
实例
FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); // 存储文件的内容 char myString[100]; // 读取内容并将其存储在 myString 中 fgets(myString, 100, fptr); // 打印文件内容 printf("%s", myString); // 关闭文件 fclose(fptr);
输出:
Hello World!
注意:fgets
函数只读取文件的第一行。如果你还记得的话,filename.txt 文件中有两行文本。
要读取文件的每一行,你可以使用 while
循环:
实例
FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); // 存储文件的内容 char myString[100]; // 阅读内容并打印 while(fgets(myString, 100, fptr)) { printf("%s", myString); } // 关闭文件 fclose(fptr);
输出:
Hello World! Hi everybody!
好的实践
如果你尝试打开一个不存在的文件进行读取,fopen()
函数将返回 NULL
。
提示:作为一项好的实践,我们可以使用 if
语句来测试是否为 NULL
,并在文件不存在时打印一些文本(例如):
实例
FILE *fptr; // 以读取模式打开文件 fptr = fopen("loremipsum.txt", "r"); // 如果文件不存在则打印一些文本 if(fptr == NULL) { printf("无法打开文件。"); } // 关闭文件 fclose(fptr);
如果文件不存在,将打印以下文本:
无法打开文件。
考虑到这一点,如果我们再次使用上面的“读取文件”示例,我们可以创建更可持续的代码:
实例
如果文件存在,则读取内容并打印它。如果文件不存在,则打印一条消息:
FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); // 存储文件的内容 char myString[100]; // 如果文件存在 if(fptr != NULL) { // 读取内容并打印它 while(fgets(myString, 100, fptr)) { printf("%s", myString); } // 如果文件不存在 } else { printf("无法打开文件。"); } // 关闭文件 fclose(fptr);
输出:
Hello World! Hi everybody!