【C++】⽂件的读取与写⼊
C++的⽂件读取与写⼊感觉⽐起其它语⾔特别地难,对⽐起《【】⽂件读写操作》()、《【】让记事本成为你调控变量的控制台》()与《【】输⼊与输出与JDK1.5之后的新型字符串StringBuilder》(),C++最⼤的特点就是⽂件的输⼊流与输出流分开,同时最关键的是⾃⾝并没有字符串变量,在其⽂件的读取⽅法变量限制于字符数组char[],需要利⽤到⼀个⼆维的字符数组char[][]才能完事。
同时由于各⼤的编译器不同,C++在你不对变量初始化也不会出现警告的情况下,你还必须⽤memset⽅法,⾃⼰对⼆维字符数组初始化,使得判断为空的条件⼀致。
下⾯,⽤以下的⼀个程序说明问题:
如果f:\1.txt不存在,则先⾃⼰创建这个⽂件,之后,⽤户不停地输⼊数据,直到输⼊exit;结束。
程序的难度主要是在⽂件的内容读⼊到C++的⼆维数组上,其基本思想如下图所⽰:
代码如下:
[cpp]
01. #include<iostream>
02. #include<fstream>
03. using namespace std;
04. int main(){
05.
06. char input[255];//⽤来接受⽤户输⼊的内容
07. char fileContent[100][255];//⽤来接⽂件内容的数组,相等于⼀个⼀维的字符串数组。
08.    memset(fileContent,'\0',sizeof(fileContent));//这⾥必须对整个数组进⾏初始化,不然的话,不同的编译器对数组初始化的
值不同,导致下⾯的输出⽆法判断
09. char* filePath="F:\\1.txt";//这样可以避免引⼊string头⽂件,使⽤string类型了
10.
11. while(1){
12. //读取⽂件到C++
13.        ifstream infile(filePath,ios::in|ios::_Nocreate);//vs写成ios::_Nocreate,vc6是ios::nocreate
14. if(!infile){//如果输⼊流初始化失败就是⽂件不存在
15.            cout<<filePath<<"不存在,已为你创建!"<<endl;
16.            ofstream fileCreate(filePath,ios::_Noreplace);//⽤来创建⽂件专⽤的输出流,vs写成ios::_Noreplace,vc6是
ios::noreplace
17. if(fileCreate){
18.                fileCreate.close();//⼈⾛带门
19.            }
20. else{
21.                cerr<<"出错了!"<<endl;
22.                exit(1);
23.            }
24.        }
注释已经说得⽐较清楚了。这⾥不再赘述。
唯⼀想说⼀下,
涉及⽂件操作,开头必须引⼊<fstream>
利⽤getline ⽅法,C++能把⼀⾏内指定长度的内容,这⾥是255,读取到你指定的⼀维数组中,遇到Enter 等换⾏符则⾃动终⽌,⽆论此时所读的⼀⾏长度是否累积到255,同时⾃⼰把光标移到下⼀⾏。25.        else {  26.            for (int  i=0;!f();i++){//这个循环的结束条件是输⼊流遇到⽂件的结尾,也就是读完F:\1.txt 中的数据  27.
if (!strcmp(input,"exit;")){//如果⽤户输⼊的字符串与exit;相等,strcmp(input,"exit;")则返回0,进⼊这个条件结构,终⽌这个程序  41.python怎么读的
return  0;//这就是主函数以int 类型作为返回值,return 0的好处,⽤来设定程序终点,当然如果⽤void 作为主函数的返回值exit(0);也可以做到这⼀点  42.        }  43.  44.        //C++输出内容到⽂件  45.
ofstream outfile(filePath,ios::ate|ios::_Nocreate);//ios::ate 可以直接把指针放到⽂件末尾。ios::app 不好⽤,要配合outfile.seekp(0,ios::end)才能把⽂件弄到⽂件末尾,默认是在⽂件头  46.        if (!outfile){  47.            cerr<<"出错了!"<<endl;  48.            exit(1);  49.        }  50.        else {  51.            outfile<<input<<'\n';//将⽤户输⼊的内容对⽂件输出流进⾏输出  52.        }  53.        outfile.close();//⼈⾛带门  54.    }  55. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。