亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C - 文件 I/O

上一章解释了 C 编程语言处理的标准输入和输出设备。本章介绍了 C 程序员如何为他们的数据存储创建、打开、关闭文本或二进制文件。

一个文件代表一个字节序列,不管它是文本文件还是二进制文件。 C 编程语言提供对高级函数的访问以及低级(操作系统级)调用来处理存储设备上的文件。本章将带您了解文件管理的重要调用。

打开文件

您可以使用 fopen( ) 创建新文件或打开现有文件的功能。此调用将初始化 FILE 类型的对象 ,其中包含控制流所需的所有信息。该函数调用的原型如下 -

FILE *fopen( const char * filename, const char * mode );

这里,文件名 是一个字符串文字,您将使用它来命名您的文件,并访问 mode 可以具有以下值之一 -

Sr.No. 模式和说明
1

r

打开现有的文本文件以供阅读。

2

w

打开一个文本文件进行写入。如果它不存在,则创建一个新文件。在这里,您的程序将从文件的开头开始写入内容。

3

一个

打开一个文本文件以附加模式写入。如果它不存在,则创建一个新文件。在这里,您的程序将开始在现有文件内容中附加内容。

4

r+

打开一个文本文件进行读写。

5

w+

打开一个文本文件进行读写。如果文件存在,它首先将文件截断为零长度,如果文件不存在,则创建一个文件。

6

一个+

打开一个文本文件进行读写。如果文件不存在,它会创建该文件。读取从头开始,写入只能追加。

如果您要处理二进制文件,那么您将使用以下访问模式而不是上述访问模式 -

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

关闭文件

要关闭文件,请使用 fclose( ) 函数。这个函数的原型是 -

int fclose( FILE *fp );

fclose(-) 函数成功返回零,或 EOF 如果关闭文件时出错。此函数实际上将缓冲区中仍待处理的所有数据刷新到文件中,关闭文件,并释放用于文件的所有内存。 EOF 是在头文件 stdio.h 中定义的常量 .

C标准库提供了各种函数来读取和写入文件,一个字符一个字符,或者一个固定长度的字符串。

编写文件

以下是将单个字符写入流的最简单函数 -

int fputc( int c, FILE *fp );

函数 fputc() 将参数 c 的字符值写入 fp 引用的输出流。它返回成功时写入的书面字符,否则 EOF 如果有错误。您可以使用以下函数将一个以 null 结尾的字符串写入流 -

int fputs( const char *s, FILE *fp );

函数 fputs() 写入字符串 s 到 fp 引用的输出流。成功时返回非负值,否则返回 EOF 在任何错误的情况下返回。您可以使用 int fprintf(FILE *fp,const char *format, ...) 函数以及将字符串写入文件。试试下面的例子。

确保你有 /tmp 目录可用。如果不是,那么在继续之前,您必须在您的机器上创建此目录。

#include <stdio.h>

main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

上述代码编译执行后,会创建一个新文件test.txt 在 /tmp 目录中并使用两个不同的函数写入两行。让我们在下一节阅读这个文件。

读取文件

下面给出的是从文件中读取单个字符的最简单的函数 -

int fgetc( FILE * fp );

fgetc() 函数从 fp 引用的输入文件中读取一个字符。返回值是读取的字符,或者如果有任何错误,它返回EOF .以下函数允许从流中读取字符串 -

char *fgets( char *buf, int n, FILE *fp );

函数 fgets() 从 fp 引用的输入流中最多读取 n-1 个字符。它将读取的字符串复制到缓冲区 buf , 附加一个 null 终止字符串的字符。

如果此函数在读取最大字符数之前遇到换行符 '\n' 或文件结尾 EOF,则它仅返回读取到该点的字符,包括换行符。您也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数从文件中读取字符串,但遇到第一个空格字符后停止读取。

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

当上面的代码编译并执行时,它会读取上一节创建的文件并产生以下结果 -

1 : This
2: is testing for fprintf...

3: This is testing for fputs...

让我们更详细地了解这里发生的事情。首先,fscanf() 只读这个 因为在那之后,它遇到了一个空格,第二次调用是 fgets() 它读取剩余的行,直到遇到行尾。最后,最后一次调用 fgets() 完整读取第二行。

二进制 I/O 函数

有两个函数,可用于二进制输入和输出 -

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

这两个函数都应该用于读取或写入内存块——通常是数组或结构。


C语言

  1. C 输入输出 (I/O)
  2. C 文件处理
  3. Python 文件 I/O
  4. Axiomtek:功能丰富的机器视觉应用系统
  5. 加入:用于可扩展数据通信的 I/O 模块
  6. C - 函数
  7. C - 头文件
  8. 什么是 I/O 卡及其工作原理
  9. MATLAB - 数据输出
  10. C# - 文件 I/O
  11. Python - 文件 I/O
  12. 熔断还是不熔断各个 I/O 点?