1、用fopen打开文件
该函数的原型为FILE *fopen(const char *filename, const char *mode),第一个参数是文件名,第二个参数是打开文件的模式。
打开文件的模式主要是以下几种:
“r”以文本方式打开文件,只进行读操作
“w”以文本方式打开文件,只进行写操作
“a”以文本方式打开文件,只往其末尾添加内容
“rb”以二进制方式打开文件,只进行读操作
“wb”以二进制方式打开方式,只进行写操作
“ab”以二进制方式打开文件,只往其末尾添加内容
“r+”以文本方式打开文件,既读取其数据,也往文件中写入内容
“r+b”以二进制方式打开文件,既读取其数据,也往文件中写入内容
在对文件进行读写操作前,判断fopen的返回值是否为NULL, 是非常重要的习惯。
FILE *fp = fopen(filename,mode) if (fp == NULL) { printf("Failed to open file! "); return 0; }
2、用fclose关闭文件
打开文件后,一定要用fclose函数关闭文件。
3、用fgetc读文件,用fputc写文件
fgetc的函数原型如下:
int fgetc(FILE *stream)
它用于从文件中读取一个字节,返回值即是所读取的字节数。每个字节都被当作一个无
符号的8位(二进制位)数,因此每个被读取字节的取值范围都是0-255。反复调用fgetc函
数可以读取整个文件。如果已经读到文件末尾,无法再读,那么fgetc函数返回EOF(实际上
就是-1)。
fputc函数原形如下:
int fputc(int c, FILE *stream)
它将一个字节写入文件。参数c即是要被写入的字节。虽然c是int类型的,但实际上只
有其低8位才被写入文件。如果写入失败,该函数返回EOF。
1 #include <stdio.h> 2 int main(int argc,char * argv[]) 3 { 4 FILE *fpSrc,*fpDest; 5 fpSrc = fopen(argv[1],"rb"); 6 if (fpSrc == NULL) 7 { 8 printf("Failed to open the file "); 9 return 0; 10 } 11 fpDest = fopen(argv[2],"wb"); 12 if (fpDest == NULL) 13 { 14 fclose(fpSrc); 15 printf("Failed to open the file "); 16 return 0; 17 } 18 int c; 19 while((c = fgetc(fpSrc)) != EOF) 20 { 21 fputc(c,fpDest); 22 } 23 fclose(fpSrc); 24 fclose(fpDest); 25 return 0; 26 }
4. 用fgets读文件,用fputs写文件
fgets函数原型如下:
char *fgets(char *s, int n, FILE *stream);
fgets一次从文件中读取一行,包括换行符,放入字符串s中,并且自动加上字符串结尾标志。
参数n代表缓冲区s中最多能容纳多少个字符。
fputs函数原型如下:
int fputs(const char *s, FILE *stream)
它往文件中写入字符串s。
3中的程序可以重写为如下形式:
1 #include <stdio.h>
2 int main(int argc,char * argv[])
3 {
4 FILE *fpSrc,*fpDest;
5 fpSrc = fopen(argv[1],"r");
6 if (fpSrc == NULL)
7 {
8 printf("Failed to open the file
");
9 return 0;
10 }
11 fpDest = fopen(argv[2],"w");
12 if (fpDest == NULL)
13 {
14 fclose(fpSrc);
15 printf("Failed to open the file
");
16 return 0;
17 }
18 char szLine[100];
19 while(fgets(szLine,99,fpSrc))
20 {
21 fputs(szLine,fpDest);
22 }
23 fclose(fpSrc);
24 fclose(fpDest);
25 return 0;
26 }