《C++程序设计:第十讲文件》由会员分享,可在线阅读,更多相关《C++程序设计:第十讲文件(61页珍藏版)》请在金锄头文库上搜索。
1、第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件的创建与写入文本文件的创建与写入1、创建创建文本文件文本文件指针指针#include /file stream文件流方式文件流方式ofstream outFile(文件名文件名,ios:out); /输出方式建文件输出方式建文件ofstream outFile; /先声明变量,后面才打开该文件先声明变量,后面才打开该文件outFile.open(文件名文件名,i
2、os:out);2、往文件中写入内容、往文件中写入内容 ctrl+z结束输入结束输入while (cinnamenoscore)if(i0)outFileendl; i+; /最后行后无换行符最后行后无换行符outFilename no score;cout?; /写入数据间空格分隔写入数据间空格分隔3、关闭关闭文件文件outFile.close(); /可不写,指针可不写,指针outFile释放时自动关闭,释放时自动关闭,但影响其他用户的读写呀!但影响其他用户的读写呀!第第1010讲讲 文本文件的创建与写入文本文件的创建与写入第第1010讲讲 文本文件的创建与写入文本文件的创建与写入第第10
3、10讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件的创建与写入文本文件的创建与写入1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:app);/追加到文件尾部追加到文件尾部ofstream oF(lt1.txt,ios:ate);/尾追或中间插入尾追或中间插入ifstream oF(lt1.txt,ios:in);/输入给它人方式输入
4、给它人方式ofstream oF(lt1.txt,ios:trunc);/丢弃现在内容丢弃现在内容=outfstream oF(lt1.txt,ios:binary);/二进制即非文本二进制即非文本2、if (!oF)cerr文件不能打开文件不能打开studno),隐含调用了,隐含调用了cin.void *,当,当出出错错或遇到或遇到z+Enter则结束循环则结束循环,不用不用cin.eof() 。 由于由于io套路相同套路相同,此方法可用从普通文件输入数据。此方法可用从普通文件输入数据。 建立与读取建立与读取一样了!一样了! 第第1010讲讲 文本文件的创建与写入文本文件的创建与写入建文件建
5、文件:cin-fout 文件复制文件复制读文件读文件:fin-cout第第1010讲讲 文本文件文本文件/文件尾文件尾eof()函数,函数,fin.seekg(0) ; /回到起始位置回到起始位置 fin.seekg(n); / fin.seekg(n,ios:beg)fin.seekg(n,ios:cur) ; / n0 下下fin.seekg(-n,ios:end); /从从end往回往回n个字节个字节fin.seekg(0,ios:end); /定在最后位置定在最后位置 seekp()类似类似long location=fin.tellg(); /返回当前位置返回当前位置 第第1010讲
6、讲 文本文件的创建与写入文本文件的创建与写入/文件尾文件尾eof()函数,函数,/fin.seekg(0) 回到起始位置回到起始位置 /fin.seekg(n) fin.seekg(n,ios:beg)/fin.seekg(n,ios:cur) n0 下下/fin.seekg(-n,ios:end) 从从end往回往回n个字节个字节/fin.seekg(0,ios:end) 定在最后位置定在最后位置 seekp()类似类似/long location=fin.tellg(); 返回当前位置返回当前位置 第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件的创建与写入文本文件的创建与写入
7、第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件的创建与写入文本文件的创建与写入另一种逆序另一种逆序fin.seekg(-n,ios:cur)前面前面fin.seekg(-n,ios:end) 每次以每次以end为基准为基准 第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1
8、.txt,ios:app);/追加到文件尾部追加到文件尾部ofstream oF(lt1.txt,ios:ate);/尾追或中间插入尾追或中间插入ifstream oF(lt1.txt,ios:in);/输入给它人方式输入给它人方式ofstream oF(lt1.txt,ios:trunc);/丢弃现在内容丢弃现在内容=outfstream oF(lt1.txt,ios:binary);/二进制即非文本二进制即非文本从从键盘键盘读入数据并读入数据并写入写入到文件中到文件中2、while (cinstudno) foutstudnostudnamestudno) if (studno=findV
9、al) . 第第1010讲讲 文本文件的创建与写入文本文件的创建与写入第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件的创建与写入文本文件的创建与写入第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件插入文本文件插入1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:app);/追加到文件尾部追加到文件尾部ofstr
10、eam oF(lt1.txt,ios:ate);/尾追或中间插入尾追或中间插入ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中ofstream oF(lt1.txt,ios:trunc);/丢弃现在内容丢弃现在内容=outfstream oF(lt1.txt,ios:binary);/二进制即非文本二进制即非文本 将将文件数据文件数据读入到变量中,读入到变量中,与指定学号不相等的记录,直接写入到新文件中,与指定学号不相等的记录,直接写入到新文件中,与指定学号相等则先写入待插入的记录到新文件中,与指定学号相等则先写入待插入的记录到新文件中,再写入读出的记
11、录到新文件中。全部返回来再写入读出的记录到新文件中。全部返回来 原文件原文件-输入到输入到变量变量-输出到新文件输出到新文件 Lt10M第第1010讲讲 文本文件的查询文本文件的查询如果文件存在则改名如果文件存在则改名若成功则返回若成功则返回1第第1010讲讲 文本文件的查询文本文件的查询如果文件存在则改名如果文件存在则改名若成功则返回若成功则返回1第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件删除文本文件
12、删除1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:app);/追加到文件尾部追加到文件尾部ofstream oF(lt1.txt,ios:ate);/尾追或中间插入尾追或中间插入ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中ofstream oF(lt1.txt,ios:trunc);/丢弃现在内容丢弃现在内容=outfstream oF(lt1.txt,ios:binary);/二进制即非文本二进制即非文本 将将文件数据文件数据读入到变量中,读入到变量中, 与
13、指定学号与指定学号不相等不相等的记录,直接写入到的记录,直接写入到新文件新文件中,中, 原文件原文件-输入到输入到变量变量-输出到新文件输出到新文件 Lt10N第第1010讲讲 文本文件的查询文本文件的查询如果文件存在则改名如果文件存在则改名若成功则返回若成功则返回1第第1010讲讲 文本文件的查询文本文件的查询第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,
14、ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:app);/追加到文件尾部追加到文件尾部ofstream oF(lt1.txt,ios:ate);/尾追或中间插入尾追或中间插入ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中ofstream oF(lt1.txt,ios:trunc);/丢弃现在内容丢弃现在内容=outfstream oF(lt1.txt,ios:binary);/二进制即非文本二进制即非文本 将将文件数据文件数据读入到变量中,读入到变量中, 与指定学号与指定学号相等相等的记录,修改以后写入
15、到的记录,修改以后写入到新文件新文件中,中, 与指定学号不相等的记录,直接写入到新文件中与指定学号不相等的记录,直接写入到新文件中 原文件原文件-输入到输入到变量变量-输出到新文件输出到新文件 Lt10N第第1010讲讲 文本文件的查询文本文件的查询 如果文件存在则改名如果文件存在则改名 若改名成功则返回若改名成功则返回1 原文件原文件-改名为改名为-带带bak文件文件 从从bak文件读取数据,修改后文件读取数据,修改后写入到原文件名所指文件中写入到原文件名所指文件中第第1010讲讲 文本文件文本文件第第1010讲讲- -文件文件 1、文本文件的创建与写入2、文本文件的读取3、文本文件的追加4
16、、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中 将将文件数据文件数据读入到变量中,将排序字段读入到变量中,将排序字段studno的值读的值读入到数组入到数组studNo中。为此先遍历数据表一次,获取其记中。为此先遍历数据表一次,获取其记录数,再创建其数组,再从头读到尾建立相关数组。录数,再创建其数组,再从头读到尾建立
17、相关数组。 根据关键字段排序,同时调用记录数组根据关键字段排序,同时调用记录数组 最后将排序结果写入到结果文件中最后将排序结果写入到结果文件中 原文件原文件-输入到数组输入到数组-输出到新文件输出到新文件 Lt10N第第1010讲讲 文本文件的查询文本文件的查询 如果文件存在则改名如果文件存在则改名 若改名成功则返回若改名成功则返回1 原文件原文件-改名为改名为-带带bak文件文件 从从bak文件读取数据,修改后文件读取数据,修改后写入到原文件名所指文件中写入到原文件名所指文件中第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件文本文件第第1010讲讲- -文件文件 1、文本文件的创
18、建与写入2、文本文件的读取3、文本文件的追加4、文本文件的查询5、文本文件的插入6、文本文件的删除7、文本文件的修改8、文本文件的排序9、文本文件的索引与快速查找第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中 将将文件数据文件数据读入到变量中,将排序字段读入到变量中,将排序字段studno的值读的值读入到数组入到数组studNo,。为此先遍历数据表一次,获取其记录。为此先遍历数据表一次,获取其记录数,再创建其数组,再从头读到尾建立
19、相关数组。数,再创建其数组,再从头读到尾建立相关数组。 根据关键字段排序,同时调用记录数组根据关键字段排序,同时调用记录数组 最后将排序结果写入到结果文件中最后将排序结果写入到结果文件中 原文件原文件-输入到数组输入到数组-输出到新文件输出到新文件 Lt10N第第1010讲讲 文本文件的查询文本文件的查询 如果索引文件存在则删除之如果索引文件存在则删除之第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:in)
20、;/将内容将内容输入变量中输入变量中 将将文件数据文件数据读入到变量中,将排序字段读入到变量中,将排序字段studno的值读的值读入到数组入到数组studNo,。为此先遍历数据表一次,获取其记录。为此先遍历数据表一次,获取其记录数,再创建其数组,再从头读到尾建立相关数组。数,再创建其数组,再从头读到尾建立相关数组。 根据关键字段排序,同时调用记录数组根据关键字段排序,同时调用记录数组 最后将排序结果写入到结果文件中最后将排序结果写入到结果文件中 索引文件索引文件-输入到索引数组输入到索引数组- 数据文件数据文件-显示出来显示出来第第1010讲讲 文本文件的查询文本文件的查询 如果索引文件存在则
21、删除之如果索引文件存在则删除之第第1010讲讲 文本文件文本文件第第1010讲讲 文本文件文本文件1、ofstream oF(文件名文件名,ios:out); /接受它人输出接受它人输出ifstream oF(lt1.txt,ios:in);/将内容将内容输入变量中输入变量中 将将文件数据文件数据读入到变量中,将排序字段读入到变量中,将排序字段studno的值读的值读入到数组入到数组studNo,。为此先遍历数据表一次,获取其记录。为此先遍历数据表一次,获取其记录数,再创建其数组,再从头读到尾建立相关数组。数,再创建其数组,再从头读到尾建立相关数组。 根据关键字段排序,同时调用记录数组根据关键
22、字段排序,同时调用记录数组 最后将排序结果写入到结果文件中最后将排序结果写入到结果文件中 索引文件索引文件-输入到索引数组输入到索引数组- 数据文件数据文件-显示出来,显示出来,二分法查询学号二分法查询学号第第1010讲讲 文本文件的查询文本文件的查询 如果索引文件存在则删除之如果索引文件存在则删除之第第1010讲讲 文本文件文本文件1、整合成一个小系统、整合成一个小系统 在类在类StudScore的基础上,得到的基础上,得到StudScoreFile 2、按姓名、按姓名findByEqName(string fn,string findVal) 按课程按课程findByEqKc(strng
23、fn,string findVal) 按按ps1查查findByPs1(string fn,double ps1) 按按ps2查查findByPs2(string fn,double ps2) 按按examend查查findByExamend(string fn,double ps2) 按按totalScore查查findByScore(string fn,double ps2) 3、创建、创建createText(string fn) 追加追加appendText(string fn) 插入插入insertText(string fn,string findVal) 修改修改modiText
24、(string fn,string findVal,StudScore obj) 删除删除 delText(string fn,string findVal) 排序排序sortText(string fn,string fnIndex,string fieldName) 快速查找快速查找quickFind(string fn, string fIdx,string fVal) 第第1010讲讲 文本文件的查询文本文件的查询代码见项目代码见项目Lt10L第第1010讲讲 文本文件的查询文本文件的查询第第1010讲讲 文本文件的查询文本文件的查询第第1010讲讲 文本文件的查询文本文件的查询第第1
25、010讲讲 文本文件的查询文本文件的查询/StudScoreFile.cpp= pare(s2)s1.find(s2),s2.rfind(s2)第第1010讲讲 文本文件的查询文本文件的查询参照参照findByEqNo编写以上代码,编写以上代码,每编写一个,在每编写一个,在main()增加一段代码调用增加一段代码调用该函数,这就是极限开发该函数,这就是极限开发第第1010讲讲 文本文件文本文件参照参照findByEqNo编写以上代码,编写以上代码,每编写一个,在每编写一个,在main()增加一段代增加一段代码调用该函数,这就是极限开发码调用该函数,这就是极限开发第第1010讲讲 文本文件的查询文本文件的查询对于不同的查询函数,可能对结果对于不同的查询函数,可能对结果的处理方式不一样的处理方式不一样第第1010讲讲 文本文件的查询文本文件的查询参照参照findByEqNo编写以上代码,编写以上代码,每编写一个,在每编写一个,在main()增加一段代增加一段代码调用该函数,这就是极限开发码调用该函数,这就是极限开发第第1010讲讲 文本文件的查询文本文件的查询参照参照findByEqNo完成余工作,完成余工作,写一个,写一个,main()测一个测一个,这就是极限开发,这就是极限开发