C Read Files
Read a File
In the previous chapter, we wrote to a file using w
and a
modes inside the fopen()
function.
To read from a file, you can use the r
mode:
Example
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
This will make the filename.txt
opened for reading.
It requires a little bit of work to read a file in C. Hang in there! We will guide you step-by-step.
Next, we need to create a string that should be big enough to store the content of the file.
For example, let's create a string that can store up to 100 characters:
Example
FILE *fptr;
// Open a file in read mode
fptr = fopen("filename.txt", "r");
// Store the content of the file
char myString[100];
In order to read the content of filename.txt
, we can use the fgets()
function.
The fgets()
function takes three parameters:
Example
fgets(myString, 100, fptr);
- The first parameter specifies where to store the file content, which will be in the
myString
array we just created. - The second parameter specifies the maximum size of data to read, which should match the size of
myString
(100
). - The third parameter requires a file pointer that is used to read the file (
fptr
in our example).
Now, we can print the string, which will output the content of the file:
Example
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!
Note: The fgets
function only reads the first line of the file. If you remember, there were two lines of text in filename.txt
.
To read every line of the file, you can use a while
loop:
Example
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!
Good Practice
If you try to open a file for reading that does not exist, the fopen()
function will return NULL
.
Tip: As a good practice, we can use an if
statement to test for NULL
, and print some text instead (when the file does not exist):
Example
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);
If the file does not exist, the following text is printed:
Not able to open the file.
With this in mind, we can create a more sustainable code if we use our "read a file" example above again:
Example
If the file exists, read the content and print it. If the file does not exist, print a message:
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 exists
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!