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

C语言文档阅读笔记-Basics of File Handling in C,第1张

在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 
# include 

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 
# include 

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 
#include 
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 
#include 
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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存