C语言文档阅读笔记-Basics of File Handling in C

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言文档阅读笔记-Basics of File Handling in C相关的知识,希望对你有一定的参考价值。

在C语言练习时,通常只会把数据打印到终端上,而在真实的软件开发场景中,需要将某些数据存起来,这就涉及了C语言对文件的读写操作。关于读写操作,有下面几个基本操作:

①创建一个文件(fopen并且可以使用的模式为a、a+、w、w+)。

②打开文件(fopen)。

③读取文件(fscanf或fgets)。

④写入文件(fprintf或fputs)。

⑤移动文件指针到指定的位置(fseek、rewind)。

⑥关闭文件(fclose)。

下面的表描述了各个函数的基本说明:

这里我也来解释下吧:

文件操作声明和描述
fopen():打开文件声明:FILE *fopen(const char *filename, const char *mode)
fopen()第二个mode参数代表不同的含义,包括读、写等,在C程序里面,首先都是使用fopen()创建文件指针,如果文件不存在就会创建一个文件。
如下代码:
FILE *fp;
fp = fopen("filename", "mode");
fp:文件指针类型;
filename:为文件名,可以用绝对路径也可以用相对路径;
mode:对这个文件的操作模式,有r、w、a、r+、w+、a+后面会逐一介绍每一种模式。
fclose():关闭文件声明:int fclose(FILE *fp)
关闭文件指针,这里要注意,当成功调用fopen()函数后,都要使用fclose()对文件进行关闭。调用方式如下:
fclose(fp);
fgets():读取文件声明:char *fgets(char *string, int n, FILE *fp)
逐行读取指定文件。调用方法如下:
fgets(buffer, size, fp);
buffer:接收数据的buffer;
size:buffer的大小;
fp:文件指针。
fprintf():写入文件声明:int fprintf(FILE *fp, const char *format, ...)
将字符串写入到文件中,调用如下:
fprintf(fp, "some data");

fprintf(fp, "text %d", variable_name);

打开或创建文件

通过fopen()第二个参数可以指定对文件操作的模式如下:

r:打开只读文件,当文件存在返回文件指针,否则返回NULL。

rb:以二进制的方法打开只读文件,当文件存在返回文件指针,否则返回NULL。

w:打开只写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。

wb:以二进制的方法打开只写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。

a:以附加的方式打开只读文件,打开成功返回文件末尾,如果不存在就创建新文件,创建不了就返回NULL。

ab:以二进制附加的方式打开只读文件,打开成功返回文件末尾,如果不存在就创建新文件,创建不了就返回NULL。

r+:打开可读可写文件,当文件存在返回文件指针,否则返回NULL。

rb+:以二进制的方法打开可读可写文件,当文件存在返回文件指针,否则返回NULL。

w+:打开可读可写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。

wb+:以二进制的方法打开可读可写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。

a+:以附加的方式打开可读可写文件,打开成功返回文件末尾,如果不存在就创建新文件,创建不了就返回NULL。

ab+:以二进制附加的方式打开可读可写文件,打开成功返回文件末尾,如果不存在就创建新文件,创建不了就返回NULL。

上面描述的各种模式中,如果要对二进制文件进行操作,就是在最后添加“b”字符就可以了。比如“w”改写成“wb”,“a+”改写成“a+b”。

比如如下调用方式:

FILE *filePointer; 

So, the file can be opened as 

filePointer = fopen("fileName.txt", "w")

从文件中读取数据

可以使用fsanf和fgets这两个函数读取文件数据,如下代码:

FILE * filePointer; 

filePointer = fopen("fileName.txt", "r");

fscanf(filePointer, "%s %s %s %d", str1, str2, str3, &year);

写文件

可以使用fprintf和fputs如下代码:

FILE *filePointer ; 

filePointer = fopen("fileName.txt", "w");

fprintf(filePointer, "%s %s %s %d", "We", "are", "in", 2012);

 

关闭文件

当对文件操作完成后就要关闭文件,代码如下:

FILE *filePointer ; 

filePointer= fopen("fileName.txt", "w");

---------- Some file Operations -------

fclose(filePointer)

例子1:打开文件,写文件,然后关闭。

// C program to Open a File,
// Write in it, And Close the File

# include <stdio.h>
# include <string.h>

int main( )


	// Declare the file pointer
	FILE *filePointer ;
	
	// Get the data to be written in file
	char dataToBeWritten[50]
		= "GeeksforGeeks-A Computer Science Portal for Geeks";

	// Open the existing file GfgTest.c using fopen()
	// in write mode using "w" attribute
	filePointer = fopen("GfgTest.c", "w") ;
	
	// Check if this filePointer is null
	// which maybe if the file does not exist
	if ( filePointer == NULL )
	
		printf( "GfgTest.c file failed to open." ) ;
	
	else
	
		
		printf("The file is now opened.\\n") ;
		
		// Write the dataToBeWritten into the file
		if ( strlen ( dataToBeWritten ) > 0 )
		
			
			// writing in the file using fputs()
			fputs(dataToBeWritten, filePointer) ;
			fputs("\\n", filePointer) ;
		
		
		// Closing the file using fclose()
		fclose(filePointer) ;
		
		printf("Data successfully written in file GfgTest.c\\n");
		printf("The file is now closed.") ;
	
	return 0;	

例2:打开文件,读文件,然后关闭。

// C program to Open a File,
// Read from it, And Close the File

# include <stdio.h>
# include <string.h>

int main( )


	// Declare the file pointer
	FILE *filePointer ;
	
	// Declare the variable for the data to be read from file
	char dataToBeRead[50];

	// Open the existing file GfgTest.c using fopen()
	// in read mode using "r" attribute
	filePointer = fopen("GfgTest.c", "r") ;
	
	// Check if this filePointer is null
	// which maybe if the file does not exist
	if ( filePointer == NULL )
	
		printf( "GfgTest.c file failed to open." ) ;
	
	else
	
		
		printf("The file is now opened.\\n") ;
		
		// Read the dataToBeRead from the file
		// using fgets() method
		while( fgets ( dataToBeRead, 50, filePointer ) != NULL )
		
		
			// Print the dataToBeRead
			printf( "%s" , dataToBeRead ) ;
		
		
		// Closing the file using fclose()
		fclose(filePointer) ;
		
		printf("Data successfully read from file GfgTest.c\\n");
		printf("The file is now closed.") ;
	
	return 0;	

例3:使用fwrite写二进制文件。

#include <stdio.h>
#include <stdlib.h>
struct threeNum

int n1, n2, n3;
;
int main()

int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\\\program.bin","wb")) == NULL)
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);

for(n = 1; n < 5; ++n) //Program Code Submitted by Susobhan Akhuli

num.n1 = n;
num.n2 = 5*n;
num.n3 = 5*n + 1;
fwrite(&num, sizeof(struct threeNum), 1, fptr);

fclose(fptr);
return 0;

例4:使用fread()读二进制文件。

#include <stdio.h>
#include <stdlib.h>
struct threeNum

int n1, n2, n3;
;
int main()

int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("C:\\\\program.bin","rb")) == NULL)
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);

for(n = 1; n < 5; ++n) //Program Code Submitted by Susobhan Akhuli

fread(&num, sizeof(struct threeNum), 1, fptr);
printf("n1: %d\\tn2: %d\\tn3: %d", num.n1, num.n2, num.n3);

fclose(fptr);

return 0;

以上是关于C语言文档阅读笔记-Basics of File Handling in C的主要内容,如果未能解决你的问题,请参考以下文章

C语言文档阅读笔记-Basics of File Handling in C

第一周 Basics of Python 第一节 走进Python

C#官方文档阅读笔记--C#语言和.NET简介

A Tour of Go: Basics 2

OpenSSL文档阅读笔记-RSA Encryption & Decryption Example with OpenSSL in C

Basics of Algorithmic Trading: Concepts and Examples