在上一章中,我们使用以下命令写入文件w
和a
里面的模式fopen()
功能。
到读从文件中,您可以使用r
模式:
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
这将使filename.txt
打开阅读。
读取 C 中的文件需要一些工作。请坚持住!我们将逐步指导您。
接下来,我们需要创建一个足够大的字符串来存储文件的内容。
例如,让我们创建一个最多可以存储 100 个字符的字符串:
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
为了阅读内容filename.txt
,我们可以使用fgets()
功能。
这个fgets()
函数采用三个参数:
fgets(myString, 100, fptr);
myString
我们刚刚创建的数组。myString
(100
)。fptr
在我们的例子中)。现在,我们可以打印字符串,这将输出文件的内容:
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
// Read the content and store it inside myString
fgets(myString, 100, fptr);
// Print the file content
printf("%s", myString);
// Close the file
fclose(fptr);
Hello World!
笔记:这个fgets
函数只读取文件的第一行。如果你还记得的话,里面有两行文字filename.txt
。
要读取文件的每一行,您可以使用while
环形:
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
// Read the content and print it
while(fgets(myString, 100, fptr)) {
printf("%s", myString);
}
// Close the file
fclose(fptr);
Hello World!
Hi everybody!
如果您尝试打开一个不存在的文件进行读取,fopen()
函数将返回NULL
。
提示:作为一个好的做法,我们可以使用if
要测试的语句NULL
,并打印一些文本(当文件不存在时):
FILE *fptr;
// Open a file in read mode
fptr = fopen("loremipsum.txt", "r");
// Print some text if the file does not exist
if(fptr == NULL) {
printf("Not able to open the file.");
}
// Close the file
fclose(fptr);
如果该文件不存在,则打印以下文本:
Not able to open the file.
考虑到这一点,如果我们再次使用上面的 "read a file" 示例,我们就可以创建更可持续的代码:
如果文件存在,则读取内容并打印。如果文件不存在,则打印一条消息:
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
// If the file exist
if(fptr != NULL) {
// Read the content and print it
while(fgets(myString, 100, fptr)) {
printf("%s", myString);
}
// If the file does not exist
} else {
printf("Not able to open the file.");
}
// Close the file
fclose(fptr);
Hello World!
Hi everybody!
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!