在C中,文件的输入与输出有4种方式
1、字符输入输出
2、字符串输入输出
3、格式化输入输出
4、数据库输入输出
文件打开采用函数fopen(),声明格式如下:
FILE *fopen(const *filename, const *mode);
注意:文件操作完成后必须要关闭,否则会造成数据丢失。关闭函数是 fclose(),声明形式为:fclose(FILE *fp)
例1:新建一个文件,为 test1.txt, 存放在 D:\test\file_operate 目录下
#include<stdio.h>
void main()
{
FILE * fp; //定义文件指针
fp=fopen("D://test//file_operate//testfile.txt","w"); //以写的方式打开文件
//fp=fopen("D:\test\file_operate\testfile.txt","w"); //这种格式在 VS2012中打不开
if(fp==NULL)
{
printf("File Not created!");
}
else
{
printf("File created!\n");
fclose(fp);
}
}
顺序文件的写操作
1、基于字符的写文本文件操作
字符的输出函数是 fputc(),声明格式是:
int fputc(char c, FILE *fp);
参数 c 是要写入文件的字符变量,fp 是已经打开的文件中指针,函数返回值为整型数值。如果成功将 c 写入,函数返回值是 c,如果不能成功写入文件,函数返回值是 EOF。EOF 表示文件结尾。
例2:将用户输入的字符写入文件
// 例:将用户输入的字符写入文件
#include<stdio.h>
#include <cstdlib>
void main()
{
FILE * fp; //定义文件指针
char c;
int i;
fp=fopen("D://test//file_operate//test1.txt","w"); //以写的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File Not created!");
exit(0); //
}
else
{
printf("Please input the chars\n");
for (i=0;i<10;i++)
{
scanf("%c",&c);
fputc(c,fp); //将输入的字符存放到文件中
}
fclose(fp);
}
}
2、基于字符串的写文本文件操作
写字符串的函数是 fputs(),声明格式是:
int fputs(char *str, FILE *fp);
参数 str 可以是一个字符串、一个字符数组、一个指向字符串的指针。fp 是文件指针,函数 fputs() 的返回值是整型数据,如果文件写入成功,它将返回最后写入文件的那个字符,否则返回值为 EOF。
例3:将用户输入的一个字符串写入文件
#include<stdio.h>
#include <cstdlib>
void main()
{
FILE * fp; //定义文件指针
char ch[80];
fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File Not created!");
exit(0); //
}
else
{
printf("Please input the chars\n");
gets(ch);
fputs(ch,fp);
fclose(fp);
}
}
3、格式化写文本文件操作
格式化写文本文件的函数是 fprintf(),声明格式是:
int fprintf(FILE *fp,格式字符串,参数1,参数2,…);
fprintf()的第一个参数是文件指针,后面参数的含义与 printf()函数的相对应函数相类似。fprintf()的作用是把格式字符串所指定的输出信息输出到文件 fp所指定的文件中去。fprintf()的返回值是整型数据,表示写入文件的字节数,如果写操作发生错误时,返回值为负值。
例4:将用户输入的一个字符串写入文件中,采用格式写入的方式。
#include<stdio.h>
#include <cstdlib>
void main()
{
FILE * fp; //定义文件指针
char ch[80];
fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File Not created!");
exit(0); //
}
else
{
printf("Please input the chars\n");
gets(ch);
fprintf(fp,"The string is: %s",ch);
fclose(fp);
}
}
4、写数据块
前面几种写文件的方式,都是将一个一个的变量写入到文件中去。除了写变量的方式以外,还可以以数据块为单位来写文件。
这种方式写文件,实际上是将内存中的数据直接写到文件中去,因此,必须要指明从内存区的什么位置开始写,写多少数据,每个数据占用字节数等。把数据块写入文件的函数是:
unsigned fwrite(void *buffer,int size,int n,FILE *fp);
这个函数有 4 个参数,buffer 是要写入文件的数据的内存地址;size 是数据类型的大小;n 是要写多少个指定类型的数据;fp 是文件指针。函数的返回值是实际写入文件的数据的个数,有可能等于 n,也可能不等。如果在写文件过程中发生错误,写入操作就会终止,实际写入的数据个数也就会小于 n。
例5:将用户输入的一个字符串写入文件中,存放指定大小的数据块。
#include<stdio.h>
#define nsize 10
void main()
{
FILE * fp; //定义文件指针
char ch[80];
fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("Please input the chars\n");
gets(ch);
fwrite(ch,sizeof(char),nsize,fp);
fclose(fp);
}
}
例6:将用户输入的若干行字符串存放在文件中。
// 将用户输入的若干行字符串存放在文件中
#include<stdio.h>
#include<string.h>
#define nsize 10
void main()
{
FILE * fp; //定义文件指针
char ch[80];
fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("Please input the chars\n");
while(strlen(gets(ch))>0)
{
fwrite(ch,sizeof(char),nsize,fp);
putc('\n',fp);
}
fclose(fp);
}
}
注意:运行时要跳出 while 循环时,不输入字符串而直接回车,这时 ch 的长度为 0,也就是两个连续的回车,可结束循环。
5、写二进制文件
写二进制文件与文本文件的方式类似,不同的是只需要将文件打开方式改为二进制文件打开方式即可,例如“wb”,“ab”等。二进制文件主要用于存放各类二进制数据。