在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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)