练习对已知文件格式文件的读取和写入。
1)创建一个文本文件,在文件中输出一个九九乘法表。
2)编写一个程序,将一个文本文件拷贝到另外一个文件中。
1. 创建文本文件并输出 fopen()函数 打开文件
fopen()
函数原型:FILE* fopen(char *path, char *mode); //(文件路径和文件名,文件打开方式)
函数说明:打开一个文件, 返回该文件的指针变量,通常用文件指针来接收。
FILE* fp;//定义一个文件指针
fp = fopen("C://MulTable.txt", "w");//用只写方式打开文件
fp指向该文件。通常会接着判断文件打开是否成功。
常见文件打开方式
b: 以二进制方式打开文件
t: 以文本方式打开文件(默认方式下以文本方式打开文件)
r:以只读的方式打开文件,只允许读,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部
r+: 以可读可写的方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部
rb+: 以可读可写、二进制方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部
rt+: 以可读可写、文本方式打开文件,允许读写,此文件必须存在,否则返回NULL,打开成功后返回文件指针,位置指针指向文件头部
w: 以只写的方式打开文件,只允许写,若文件存在,文件中原有内容会被清除;若文件不存在,则创建文件,打开成功后返回文件指针,位置指针指向文件头部
w+: 以读写的方式打开文件,允许读写,若文件存在,文件中原有内容会被清除;若文件不存在,则创建文件,打开成功后返回文件指针,位置指针指向文件头部
a: 以追加、只写的方式打开文件,只允许写。若文件存在,则追加的内容添加在文件末尾,若文件不存在,则创建文件。打开成功后返回文件指针,位置指针指向文件头部(注意很多书上或资料上讲述追加方式打开成功后位置指针指向文件末尾是错误的)
a+: 以追加、可读写的方式打开文件,允许读写。若进行读操作,则从头开始读;若进行写操作,则将内容添加在末尾。若文件不存在,则创建文件。打开成功后返回文件指针,位置指针指向文件头部。
部分函数:
fputs()
函数原型:int fputs(char *s, FILE *stream);
函数说明:将一行字符串写入到文件中。
fprintf()
函数原型:fsprintf(FILE *stream, const char *format, ...);
函数说明:格式化字符串到文件中。
如:
fprintf(fp, "%d * %d = %d t", j, i, j * i);
fclose()函数 关闭文件
fclose()
函数原型:int fclose(FILE *stream); // (文件指针)
函数说明:关闭一个文件
fclose(fp);
如果打开文件最后不关闭文件可能会造成数据丢失。
2. 拷贝文本文件先定义被拷贝文件的指针和需要拷贝到的文件的指针。
FILE* fp1 = fopen("C://MulTable.txt", "r");//打开文本文件只读
FILE* fp2 = fopen("C://MTCopy.txt", "w");//打开文本文件只写 存在则清除,不存在则创建
读取fp1指向文件的数据并写入到fp2指向的文件中
char buf;
while ((buf=fgetc(fp1))!=EOF)//逐个字符读入并输出到拷贝文件中,直到读到文件尾
{
fputc(buf, fp2);
}
fgetc()
函数原型:int fgetc(FILE *stream); // (文件指针)
函数说明:从文件中读取一个字符。出错或文件尾返回EOF。
fputc()
函数原型:int fputc(int c, FILE *stream); // (字符,文件指针)
函数说明:将一个字符写入到文本文件中。
全部代码
#define _CRT_SECURE_NO_WARNINGS 1 #include#include #include using namespace std; void CopyTxt()//拷贝文本文件 { FILE* fp1 = fopen("C://MulTable.txt", "r");//打开文本文件只读 FILE* fp2 = fopen("C://MTCopy.txt", "w");//打开文本文件只写 存在则清除,不存在则创建 char buf; while ((buf=fgetc(fp1))!=EOF)//逐个字符读入并输出到拷贝文件中,直到读到文件尾 { fputc(buf, fp2); } fclose(fp1); fclose(fp2); } void CreatMulTable()//创建文本文件 输出九九乘法表 { FILE* fp = fopen("C://MulTable.txt", "w"); //打开文本文件只写 if (fp == NULL) { cout << "打开失败" << endl; return; } else cout << "打开成功" << endl; for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { fprintf(fp, "%d * %d = %d t", j, i, j * i);//向文件中写入数据 } fprintf(fp, "n"); } fclose(fp);//关闭文件 } int main() { CreatMulTable(); CopyTxt(); return 0; }



