C编程中文件处理的基础

文件处理是使用程序将数据存储在文件中。在C语言中,程序使用C语言中的文件处理功能将结果和程序的其他数据存储到文件中。而且,我们可以从文件中提取/获取数据以在程序中使用它。

您可以在C中的文件上执行的操作是-

  • 创建一个新文件

  • 打开现有文件

  • 从现有文件读取数据

  • 将数据写入文件

  • 将数据移动到文件上的特定位置

  • 关闭档案

使用创建或打开文件 fopen()

fopen()函数用于在C中创建新文件或打开现有文件。fopen函数在stdio.h头文件中定义。

现在,让我们看看创建新文件或打开文件的语法

file = fopen(“file_name”, “mode”)

这是在C中打开和创建文件的通用语法。

参数

file_name-这是一个字符串,它指定要使用fopen方法打开或创建的文件的名称。模式:这是一个字符串(通常是一个字符),指定了打开文件的模式。有很多可用的模式可以在C中打开文件,我们将在本文的后面部分中介绍所有这些模式。

什么时候创建文件?

当fopen函数在指定位置找不到指定名称的任何文件时,它将创建一个新文件。否则,如果找到该文件,它将以指定的模式打开。

让我们看一下可以使概念更清楚的示例。假设我们正在使用fopen函数打开一个名为hello.txt的文件。以下是声明,

file = fopen(“hello.txt”, “w”)

这将在当前目录中搜索名为hello.txt的文件。如果文件存在,它将打开文件,否则将创建一个名为“ hello.txt”的新文件,并以写入模式(使用“ w”指定)打开。

现在,让我们看看所有可用的模式来供我们使用C读写文件,并查看代码片段,这些代码片段将显示示例代码运行。

模式=“ r” -打开以供读取,此模式将仅出于读取目的打开文件,即只能查看内容,不能对文件进行任何其他编辑操作。

如果我们尝试使用此模式创建新文件,则此模式无法创建新文件,并且open()返回NULL

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "r")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using r mode");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in read mode

我们在当前目录中创建了一个名为hello.txt的文件,但是如果尝试访问其他文件,则会得到“该文件不存在!无法使用r模式创建新文件”作为输出。

Mode =“ rb” -打开以二进制模式读取,此模式将仅以二进制模式打开文件读取,即只能查看内容,而不能像对其进行编辑一样。

如果我们尝试使用此模式创建新文件,则此模式无法创建新文件,并且open()返回NULL

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("program.txt", "rb")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using rb mode");
   fclose(file);
   return 0;
}

输出结果

该文件不存在!无法使用rb模式创建新文件

模式=“ w” -仅用于写入打开,如果当前目录中存在该文件仅用于写入,则此模式将打开文件,即无法执行读取操作。如果当前目录中不存在该文件,则程序将创建一个新文件并打开以进行写入。

如果我们打开其中包含一些文本的文件,则内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("helo.txt", "w")){
      printf("File opened successfully in write mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in write mode or a new file is created

您可以在此处看到,我们试图打开目录中不存在的文件“ helo.txt”,但该函数仍返回成功消息,因为它已创建了一个名为“ helo.txt”的文件。

模式=“ wb” -打开以二进制模式写入,如果当前目录中存在文件,则以该模式打开文件以二进制模式写入,即无法执行读取操作。如果当前目录中不存在该文件,则程序将创建一个新文件并以二进制方式打开以进行写入。

如果我们打开其中包含一些文本的文件,则内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "wb")){
      printf("File opened successfully in write in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

以二进制模式写入成功打开文件或创建了新文件

模式=“ a” -仅打开用于追加,如果当前目录中存在该文件,则该模式将打开该文件仅用于写入,即无法执行读取操作。如果当前目录中不存在该文件,则程序将创建一个新文件并打开以进行写入。如果我们打开其中包含一些文本的文件,内容将不会被覆盖;而是将新文本添加到文件中现有文本之后。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "a")){
      printf("File opened successfully in append mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in append mode or a new file is created

模式=“ ab” -打开以二进制形式追加,如果当前目录中存在该文件,则该模式将打开该文件以仅以二进制形式写入,即无法执行读取操作。如果当前目录中不存在该文件,则程序将创建一个新文件并打开以二进制形式写入。

如果我们打开其中包含一些文本的文件,内容将不会被覆盖;而是将新文本添加到文件中现有文本之后。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "ab")){
      printf("File opened successfully in append in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in append in binary mode or a new file is created

模式=“ r +” -打开以同时进行读取和写入,此模式将同时打开文件以进行读取和写入,即可以对文件执行读取和写入操作。

如果我们尝试使用此模式创建新文件,则此模式无法创建新文件,并且open()返回NULL

如果我们打开一个包含一些文本的文件并写一些东西,内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "r+")){
      printf("File opened successfully in read and write both");
   }
   else
   printf("The file is not present! cannot create a new file using r+ mode");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in read and write both

我们在当前目录中创建了一个名为hello.txt的文件,但是如果尝试访问另一个文件,则会得到“该文件不存在!无法使用r +模式创建新文件”作为输出。

Mode =“ rb +” -打开以二进制模式读取,此模式将仅以二进制模式打开文件读取,即只能查看内容,而不能对其进行任何其他编辑。

如果我们尝试使用此模式创建新文件则此模式无法创建新文件,并且open()返回NULL

如果我们打开一个包含一些文本的文件并写一些东西,内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("program.txt", "rb+")){
      printf("File opened successfully in read mode");
   }
   else
   printf("The file is not present! cannot create a new file using rb+ mode");
   fclose(file);
   return 0;
}

输出结果

The file is not present! cannot create a new file using rb+ mode

模式=“ w” -打开以进行写入和读取,如果当前目录中存在文件,则此模式将打开文件以进行写入和读取操作。如果当前目录中不存在该文件,则程序将创建一个新文件并打开该文件以进行读取和写入。

如果我们打开其中包含一些文本的文件,则内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("helo.txt", "w+")){
      printf("File opened successfully in read-write mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in read-write mode or a new file is created

您可以在此处看到,我们试图打开目录中不存在的文件“ helo.txt”,但该函数仍返回成功消息,因为它已创建了一个名为“ helo.txt”的文件。

Mode =“ wb +”:以二进制模式打开以进行读写,如果当前目录中存在该文件,则该模式将打开文件以供读写

二进制模式。如果当前目录中不存在该文件,则程序将创建一个新文件并打开该文件以二进制方式进行读写。如果我们打开其中包含一些文本的文件,则内容将被覆盖。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "wb+")){
      printf("File opened successfully in read-write in binary mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

File opened successfully in read-write in binary mode or a new file is created

模式=“ a +” -打开以进行读取和追加,如果当前目录中存在该文件,则该模式将打开该文件以进行读取和写入。如果当前目录中不存在该文件,则程序将创建一个新文件并打开该文件以进行读取和写入。

如果我们打开其中包含一些文本的文件,内容将不会被覆盖;而是将新文本添加到文件中现有文本之后。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "a+")){
      printf("File opened successfully in read-append mode or a new file is created");
   }
   else
   printf("Error!");
   fclose(file);
   return 0;
}

输出结果

在读取追加模式下成功打开文件或创建了新文件

模式=“ ab +” -打开以二进制形式读取和追加,此模式将打开文件(如果存在于当前目录中)以以二进制形式进行读取和写入。如果当前目录中不存在该文件,则程序将创建一个新文件并打开该文件以进行二进制读写。如果我们打开其中包含一些文本的文件,内容将不会被覆盖;而是将新文本添加到文件中现有文本之后。

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "ab+")){
      printf("File opened successfully in read-append in binary mode or a new file is created");
   }
   else
   printf("Error!”);
   fclose(file);
   return 0;
}

输出结果

File opened successfully in read-append mode or a new file is created

从现有文件读取数据

我们可以使用fscanf()andfgets()fgetc()函数读取c中文件的内容。全部用于读取文件的内容。让我们看看每个函数的工作原理-

fscanf()

fscanf()方法用于读取字符集,即文件中的字符串。当文件的所有内容都被读取时,它将返回EOF。

语法

int fscanf(FILE *stream, const char *charPointer[])

参数

FILE *stream: the pointer to the opened file.
const char *charPointer[]: string of character.

示例

#include <stdio.h>
int main(){
   FILE * file;
   char str[500];
   if (file = fopen("hello.txt", "r")){
         while(fscanf(file,"%s", str)!=EOF){
         printf("%s", str);
      }
   }
   else
   printf("Error!”);
   fclose(file);
   return 0;
}

输出结果

Learnprogrammingatnhooo

fgets()

fget()C语言中的函数用于从流中读取字符串。

语法

char* fgets(char *string, int length, FILE *stream)

参数

char *string: It is a string which will store the data from the string.
int length: It is an int which gives the length of string to be considered.
FILE *stream: It is the pointer to the opened file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   char str[500];
   if (file = fopen("hello.txt", "r")){
      printf("%s", fgets(str, 50, file));
   }
   fclose(file);
   return 0;
}

输出结果

Learn programming at nhooo.com

fgetc()

fgetc()C语言中的函数用于从文件中返回单个字符。它从文件中获取一个字符,并在文件末尾返回EOF。

语法

char* fgetc(FILE *stream)

参数

FILE *stream: It is the pointer to the opened file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   char str;
   if (file = fopen("hello.txt", "r")){
      while((str=fgetc(file))!=EOF)
      printf("%c",str);
   }
   fclose(file);
   return 0;
}

输出结果

Learn programming at nhooo.com

用C将数据写入文件

我们可以用数据写入到在C文件fprintf()fputs()fputc()等功能。全部用于将内容写入文件。

让我们看看每个函数的工作原理-

fprintf()

fprintf()方法用于将数据写入文件。它在文件中写入一组字符。

语法

int fprintf(FILE *stream, char *string[])

参数

FILE for *stream: It is the pointer to the opened file.
char *string[]: It is the character array that we want to write in the file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      if(fprintf(file, "nhooo.com”) >= 0)
      printf("Write operation successful");
   }
   fclose(file);
   return 0;
}

输出结果

Write operation successful

fputf()

fputf()C中的函数可用于写入文件。它用于向文件写入一行(字符行)。

语法

int fputs(const char *string, FILE *stream)

参数

Constant char *string[]: It is the character array that we want to write in the file.
FILE for *stream: It is the pointer to the opened file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      if(fputs("nhooo.com", file) >= 0)
      printf("String written to the file successfully...");
   }
   fclose(file);
   return 0;
}

输出结果

String written to the file successfully…

fputc()

fputc()函数用于将单个字符写入文件。

语法

int fputc(char character , FILE *stream)

参数

char character : It is the character that we want to write in the file.
FILE for *stream: It is the pointer to the opened file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   if (file = fopen("hello.txt", "w")){
      fputc('T', file);
   }
   fclose(file);
   return 0;
}

输出结果

‘T’ is written to the file.

fclose()

fclose()方法用于关闭打开的文件。在对其执行操作后,我们应该关闭文件以保存已应用到该文件的操作。

语法

fclose(FILE *stream)

参数

FILE for *stream: It is the pointer to the opened file.

示例

#include <stdio.h>
int main(){
   FILE * file;
   char string[300];
   if (file = fopen("hello.txt", "a+")){
      while(fscanf(file,"%s", string)!=EOF){
         printf("%s", string);
      }
      fputs("Hello", file);
   }
   fclose(file);
   return 0;
}

输出结果

Learnprogrammingatnhooo

文件包含

Learn programming at nhooo.comHello