C语言文件操作
程序为什么需要文件?
1>配置
unix采用文本 Windows采用注册表二进制文件
2>媒体数据
存档在二进制文件中
还有很多用处
首先以标准的输入输出谈起~
(1)格式输入输出
printf("%[flag][width][.prec][hlL]type");
1>
flag 含义
- 左对齐
+ 允许显示正号
0 0填充
举例:
int main(){
a = 123; printf("-9%d",a); printf("+9%d",a); a = 123; printf("+9%d",a); printf("9%d",a);
return 0;
}
屏幕上打印为
--------------------------
123
+123
-123
-123
--------------------------
2>
width或prec 含义
number 最小字符数
* 下一个参数是字符数
.number 小数点后保留几位
.* 下一个参数是小数点后的位数
举例:
a = 123.4512;
printf("9.2%d",a);
printf("",a);
//9代表至少有九个字符,2后面保留的小数数位
屏幕上打印为
--------------------------
123.45
--------------------------
3>hlL修饰符
hh 单个字节
h short
l long
ll long long
L long double
4>type
显示类型
%d 整数类型
%f float
%o 八进制
%x 十六进制
e 指数
n 输入输出的个数
例如
printf("%nd",1234,&num) //num储存了输出的个数,在这个例子中是4
hh char
h short
l long double
(2)文件的操作
1>文件的打开与创建
用到fopen函数,先看一个例子
FILE *fp = fopen("12.in","r"); if(fp) { fscanf(fp,"%d",&num); fclose(fp); } else { //文件打开是失败 }
FILE *fopen(char *pname,char *mode)
上述为函数原型,入口参数如下所示
pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式如下所示
----------------------------------
r 打开只读
r+ 打开读写,从文件开头开始
w 打开只写,文件不存在则新建,如果存在则清空
w+ 打开读写,文件不存在则新建,如果存在则清空
a 打开追加
..x 只新建,如果已经存在则无法打开
----------------------------------
返回值为状态:
正常返回:被打开文件的文件指针。
异常返回:NULL,表示打开操作不成功。
总结一下
打开文件的作用是:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;
2>文件的关闭
文件的关闭简单,就是利用fclose函数
int fclose(FILE *fp);
入口参数为文件指针,返回值为状态(正常为0,错误为EOF)
3>文件的读写操作
文件的读写有多种函数。
举一个例子,格式化读写。
格式化写
1.函数原型
int fprintf(FILE *fp,char *format,arg_list)
2.功能说明
将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。
3.入口参数说明
fp:这是个文件指针,指出要将数据写入的文件。
format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。
void main() { char name[10]; int nAge,nClass; long number; FILE *fp; if((fp=fopen("student.txt","w"))==NULL) { printf("The file %s can not be opened.\n","student.txt"); return; } fscanf(stdin,"%s %d %d %ld",name,&nClass,&nAge,&number); fprintf(fp,"%s %5d %4d %8ld",name,nClass,nAge,number); fclose(fp); if((fp=fopen("student.txt","r"))==NULL) { printf("The file %s can not be opened.\n","student.txt"); return; } fscanf(fp,"%s %d %d %ld",name,&nClass,&nAge,&number); printf("name nClass nAge number\n"); fprintf(stdout,"%-10s%-8d%-6d%-8ld\n",name,nClass,nAge,number); fclose(fp); }
下面一篇文章对文件读写做出详细说明http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html