第一课:文件操作【剽取其一,加解密】
对于初学者而言,文件写入和读出很陌生,这一环可以说是蛮深奥的,小编也算是刚接触了,不过呢,小编有点心得,有的都不会写出来,但是思路在。
经过搜集了一些说法和体会,不得不说,这门文件操作学到最后也是寂寞天堂。可能用于程序加解密一环。往深奥方面说,只要计算机还在世,你就有出头之地。
下面,小编就文件读出和写入,浅入交流:
首先,写入的方式和读出的方式有几种,小编取一做交流的题材。
我们在想写文件操作时,就得用到一个文件,小编就用最简单的File文件。
它的头文件,在你写到
#include <iostream> using namespace std; int main () { system("pause"); return 0; }
File也在<iostream>这个头文件包含在内了。
既然做好准备了,那么开始逐步实现文件操作的写法了。
当然写一段程序前,要把你想写的内容写出来,具体想实现什么功能。
1.创建文件流
2.打开文件
<1>判断文件打开是否成功
3.写入和读出
<当你想写入时,就得注意:1.所写入的文件存在不存在 2.如果存在,就得避免被重新写入的可能,把原有数据覆盖掉 3.如果不存在,该如何创建出来>
4.关闭文件流
1 void WriteToFile() 2 { 3 FILE* f_Writed = NULL; //写入流对象 4 FILE* f_Read = NULL; //读出流对象 5 6 //打开文件 7 f_Read = fopen("Mr.she.txt", "r"); //Mr.she.txt 就是要用到的文件名,小编先在项目下创建好了,‘r’只读属性,就是防止写入的功能 8 //判断文件打开是否失败 9 if (!f_Read) 10 { 11 cout << "文件打开失败!" << endl; 12 system("pause"); 13 return; 14 } 15 16 f_Writed = fopen("Mr.jie.txt", "w"); 17 //判断写入时,文件打开与否 18 if (!f_Writed) 19 { 20 cout << "文件打开失败!" << endl; 21 system("pause"); 22 return; 23 } 24 25 cout << "文件打开成功!" << endl; 26 27 //写入和读出 28 还没写呢 29 //关闭流对象 30 if (f_Writed || f_Read) 31 { 32 fclose(f_Writed); 33 fclose(f_Read); 34 } 35 }
写到这里,先运行下你的编译器,只要能打出“文件打开成功!”就说明你写得很成功,当然,这里我们只用到了一个功能,那就是打开,写入流为何也要打开,又为何要写出来呢,“Mr.jie.txt”这个文件就是我们要输出的文件。‘w’只写属性,当运行一次后,项目下只要没有这个文件,就会被创建出来。
为了更为直观的了解和代码的实现,你可以在“Mr.she.txt”文件写点字符,当然在这里呢,如果写入文字效果的话,往后写代码的话,你可能会懵逼,小编建议先写入一些字母为好。
方便你能口头眼目,读出这些字符的字节数。也为了编译器更能直观输出时,你能看得懂。
feof(FILE* fp) 如果文件结束,则返回非0值,否则返回0 EOF -1
假若你写过一些文件的话,小编就不搬门弄斧了,下面小编就会用到这个函数和EOF。
下面,就开始读出和写入的实现,前面说到,既然“Mr.she.txt”文件内已经写了一些英文字母,就说明,我们可以直接读出来,再写入到另一个文件内“Mr.jie.txt”
{ //声明一些需要用到的变量 char stringname[256] = {0}; //用来存储文件被读出的数据 int ret = 0; //接收feof()状态值 size_t readLength = 0; //接收fread()数据大小值 size_t writeLength = 0; //接收fwrite()数据大小值 //读出、写入文件 while ((ret = feof(f_Read)) != EOF) { //读出文件,因为我们假设不知道文件所写的是什么内容,文件又不大的话,可以先设定为256 //当然sizeof(stringname)也行 readLength = fread((char*)stringname, sizeof(stringname),1, f_Read); //打开文件,依次将每读出一块数据,数据可以设定,然后写入到文件中 writeLength = fwrite((char*)stringname, readLength,1, f_Writed); //当读取完毕,结束继续读,feof()这个函数会读取2次 if (ret == feof(f_Read)) { system("pause"); break; } } //判断当写入和读出两个数据完全不同,则爆出提示错误,退出 if (readLength != writeLength) { cout << "写入文件失败,请检查是否磁盘溢满!" << endl; } }
这一段就是先读出“Mr.she.txt”文件内容后写入"Mr.jie.txt"文件的实现方式。
不管对与不对,先运行下看看,编译器编译才是正理。
输出的结果,在编译器上是看不到的,因为已经输出到"Mr.jie.txt"内了。打开你的项目找到这个文件,打开就能看到一段字母,也就是你在“Mr.she.txt”文件内写的。