![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
#include <stdio.h>
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
/*
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
* FILE // fopen, getc, putc, fclose // stdin, stdout, stderr // NULL
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(1) FILE *fp; //file pointer
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(2) FILE *fopen(char *fileName, char *mode); // fp = fopen (fileName, mode);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(3) read ("r"), write ("w"), append ("a")
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(4) 为了区分 text文件和binary文件,可以在以上三种打开方式后面加上 "b" (binary file)
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(5) 若"a"或者"w"时,若这个文件不存在,将会新创建(create)一个文件
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(6) 若文件已存在,当"a"时,文件以前的内容将保留;若"w"时,将覆盖。
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(7) fopen打开文件失败时,回返回NULL指针,原因可能是"r"读一个不存在的文件,或者权限不够
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*(8) 当c程序执行时,OS负责打开三个标准文件指针,分别为stdin, stdout, stderr
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
*/
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//int getc(FILE *fp)读fp指向stream的下一个字符,当文件结尾或出错时,返回EOF。
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//int putc(char ch, FILE *fp)向fp中写入一个字符,并返回该字符,出错时返回EOF。
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//#define getchar() getc(stdin)
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//#define putchar(c) putc(c, stdout)
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
void fileCopy(FILE *sourceFile, FILE *targetFile){
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
int ch;
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
while((ch = getc(sourceFile)) != EOF)
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
putc(ch, targetFile);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
}
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
int main( int argc, char** argv) {
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
FILE *sourceFile, *targetFile;
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
char *sourceFileName = "source.txt", *targetFileName = "target.txt";
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
if((sourceFile = fopen(sourceFileName, "rb")) == NULL){
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
printf( "Error: can't open %s\n", sourceFileName);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
} else if((targetFile = fopen(targetFileName, "ab")) == NULL){
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
printf( "Error: can't open %s\n", targetFileName);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
}
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//stdout 标准输出文件 FILE *fp
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
if((sourceFile != NULL)&&(targetFile != NULL)){
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
fileCopy(sourceFile, targetFile);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//fileCopy(sourceFile, stdout); //如果把这行打开,stdout将无显示,
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//原因是sourceFile指针已经到了文件尾了
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
}
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
//关闭文件指针 fclose(FILE *fp)
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
fclose(sourceFile);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
fclose(targetFile);
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
return 0;
![](http://amao99.blog.51cto.com/images/editer/InBlock.gif)
}