哈尔滨行业网站开发,东莞建设网站公司简介,个人网站备案后做游戏,网站开发 就业简历模板一、写入文本文件
文本文件一般以行的形式组织数据。 包含头文件#xff1a;#include fstream 类#xff1a;ofstream#xff08;output file stream#xff09; ofstream 打开文件的模式#xff08;方式#xff09;#xff1a;类内open()成员函数参数2.参数1是…一、写入文本文件
文本文件一般以行的形式组织数据。 包含头文件#include fstream 类ofstreamoutput file stream ofstream 打开文件的模式方式类内open()成员函数参数2.参数1是文件存储/创建路径
例如fout.open(filename,ios::app); 对于 ofstream不管用哪种模式打开文件如果文件不存在都会创建文件。ios::out 缺省值会截断文件内容。ios::trunc 截断文件内容。truncateios::app 不截断文件内容只在文件未尾追加文件。append
主要关注路径与文件名书写方法推荐使用原始字面量和绝对路径还有打开写入关闭等操作。
具体演示和步骤如下
#include iostream
#include fstream // ofstream 类需要包含的头文件。
using namespace std;
int main()
{
// 文件名一般用全路径书写的方法如下
// 1D:\data\txt\test.txt // 错误。
// 2R(D:\data\txt\test.txt) // 原始字面量C11 标准。
// 3D:\\data\\txt\\test.txt // 转义字符。
// 4D:/tata/txt/test.txt // 把斜线反着写。
// 5/data/txt/test.txt // Linux 系统采用的方法。
string filename R(D:\data\txt\test.txt);
//char filename[] R(D:\data\txt\test.txt);
// 创建文件输出流对象打开文件如果文件不存在则创建它。
// ios::out 缺省值会截断文件内容。
// ios::trunc 截断文件内容。truncate
// ios::app 不截断文件内容只在文件未尾追加文件。append
//ofstream fout(filename);
//ofstream fout(filename, ios::out);
//ofstream fout(filename, ios::trunc);
//ofstream fout(filename, ios::app);
ofstream fout;
fout.open(filename,ios::app);
// 判断打开文件是否成功。
// 失败的原因主要有1目录不存在2磁盘空间已满3没有权限Linux 平台下很常见。
if (fout.is_open() false)
{
cout 打开文件 filename 失败。\n; return 0;
}
// 向文件中写入数据。
fout test1\n;
fout test2\n;
fout test3\n;
fout.close(); // 关闭文件fout 对象失效前会自动调用 close()。
cout 操作文件完成。\n;
}
二、读取文本文件
包含头文件#include fstream 类ifstream ifstream 打开文件的模式方式 对于 ifstream如果文件不存在则打开文件失败。ios::in 缺省值。
重点在于读取方法具体演示如下
#include iostream
#include fstream // ifstream 类需要包含的头文件。
#include string // getline()函数需要包含的头文件。
using namespace std;
int main()
{
// 文件名一般用全路径书写的方法如下
// 1D:\data\txt\test.txt // 错误。
// 2R(D:\data\txt\test.txt) // 原始字面量C11 标准。
// 3D:\\data\\txt\\test.txt // 转义字符。
// 4D:/tata/txt/test.txt // 把斜线反着写。
// 5/data/txt/test.txt // Linux 系统采用的方法。
string filename R(D:\data\txt\test.txt);
//char filename[] R(D:\data\txt\test.txt);
// 创建文件输入流对象打开文件如果文件不存在则打开文件失败。。
// ios::in 缺省值。
//ifstream fin(filename);
//ifstream fin(filename, ios::in);
ifstream fin;
fin.open(filename,ios::in);
// 判断打开文件是否成功。
// 失败的原因主要有1目录不存在2文件不存在3没有权限Linux 平台下很常见。
if (fin.is_open() false)
{
cout 打开文件 filename 失败。\n; return 0;
}第一种方法。
//string buffer; // 用于存放从文件中读取的内容。文本文件一般以行的方式组织数据。
//while (getline(fin, buffer))
//{
// cout buffer endl;
//}第二种方法。
//char buffer[16]; // 存放从文件中读取的内容。注意如果采用 ifstream.getline()一定要保证缓冲区足够大。
//while (fin.getline(buffer, 15))
//{
// cout buffer endl;
//}
// 第三种方法。
string buffer;
while (fin buffer)
{
cout buffer endl;
}
fin.close(); // 关闭文件fin 对象失效前会自动调用 close()。
cout 操作文件完成。\n;
}
三、读写二进制文件
包含头文件#include fstream 类ofstreamoutput file stream ofstream 打开文件的模式方式 对于 ofstream不管用哪种模式打开文件如果文件不存在都会创建文件。 ios::out 缺省值会截断文件内容。 ios::trunc 截断文件内容。truncate ios::app 不截断文件内容只在文件未尾追加文件。appendios::binary 以二进制方式打开文件。 操作文本文件和二进制文件的一些细节 1在 windows 平台下文本文件的换行标志是\r\n。 2在 linux 平台下文本文件的换行标志是\n。 3在 windows 平台下如果以文本方式打开文件写入数据的时候系统会将\n转换成 \r\n读取数据的时候系统会将\r\n转换成\n。 如果以二进制方式打开文件写和读都不会进行转换。 4在 Linux 平台下以文本或二进制方式打开文件系统不会做任何转换。 5以文本方式读取文件的时候遇到换行符停止读入的内容中没有换行符以二制方式读取文件的时候遇到换行符不会停止读入的内容中会包含换行符换行符被视为数据。
6在实际开发中从兼容和语义考虑一般a以文本模式打开文本文件用行的方法操作它 b以二进制模式打开二进制文件用数据块的方法操作它c以二进制模式打开文本文件和二进制文件用数据块的方法操作它这种情况表示不关心数据的内容。例如复制文件和传输文件d不要以文本模式打开二进制文件也不要用行的方法操作二进制文件可能会破坏二进制数据文件的格式也没有必要。因为二进制文件中的某字节的取值可能是换行符但它的意义并不是换行可能是整数n 个字节中的某个字节
fstream 打开文件的模式方式 对于 ifstream如果文件不存在则打开文件失败。
演示不熟悉网络通讯也可以尝试看看这个用语发送文件的简单成员函数不用管有些没见过的函数主要认识二进制数据块读出和写入。需要注意write()和read()成员函数。
bool recvfile(const string filename,const size_t filesize){
ofstream fout(filename,ios::binary);
if(fout.is_open()false){cout打开文件失败endl;return false;}int onread0;//每次调用fin.read()打算读取的字节数
int totalbytes0;//从文件中已读取的总字节数
char buffer[4096];//每次存放读取数据的字节数while(true){//计算本次应接收数据的字节数
if(filesize-totalbytes4096)onread4096;
else onreadfilesize-totalbytes;if(recv(buffer,onread)false)return false;//接收文件数据fout.write(buffer,onread);//将接收的文件写入
totalbytesonread;//更新已接收文件字节数if(filesizetotalbytes)break;
}
return true;
} //向服务端发送文件内容
bool sendfile(const string filename,const size_t filesize){
//以二进制的方法打开文件
ifstream fin(filename,ios::binary);
if(fin.is_open()false){cout打开文件filename失败\nendl;return false;}int onread0; //每次调用fin.read()打算读取的字节数
int totalbytes0;//从文件中已读取的总字节数
char buffer[4096];//每次存放读取数据的字节数while(true){
if(filesize-totalbytes4096)onread4096;//如果剩余数据字节数大于4096则这次循环打算读取的数据字节数为4096
else onreadfilesize-totalbytes;//否则就读取剩余数据的字节数fin.read(buffer,onread);//读取数据并存入bufferif(send(buffer,onread)false)//向服务端发送数据return false;
totalbytesonread;//更新已读数据量
if(totalbytesfilesize)break;//如果全部数据读取完break
}
return true;
}
三、随机存取
1.fstream 类
fstream 类既可以读文本/二进制文件也可以写文本/二进制文件。 fstream 类的缺省模式是 ios::in | ios::out如果文件不存在则创建文件但是不会清空文件原 有的内容。普遍的做法是 1如果只想写入数据用 ofstream如果只想读取数据用 ifstream如果想写和读数据用 fst ream这种情况不多见。不同的类体现不同的语义。 2在 Linux 平台下文件的写和读有严格的权限控制。需要的权限越少越好
2.文件的位置指针
对文件进行读/写操作时文件的位置指针指向当前文件读/写的位置。不论读还是写所使用的类以及相关函数文件位置指针有且只有一个所有操作都在使用这一个指针没有读指针和写指针这种说法。
1获取文件位置指针
ofstream 类的成员函数是 tellp()ifstream 类的成员函数是 tellg()fstream 类两个都有效果相 同。std::streampos tellp(); std::streampos tellg();
2移动文件位置指针 ofstream 类的函数是 seekp()ifstream 类的函数是 seekg()fstream 类两个都有效果相同。方法一 std::istream seekg(std::streampos _Pos); fin.seekg(128); // 把文件指针移到第 128 字节。 fin.seekp(128); // 把文件指针移到第 128 字节。 fin.seekg(ios::beg) // 把文件指针移动文件的开始。 fin.seekp(ios::end) // 把文件指针移动文件的结尾。方法二 std::istream seekg(std::streamoff _Off,std::ios::seekdir _Way); 在 ios 中定义的枚举类型 enum seek_dir {beg, cur, end}; // beg-文件的起始位置cur-文件的当前位置end-文件的结尾位置。 fin.seekg(30, ios::beg); // 从文件开始的位置往后移 30 字节。 fin.seekg(-5, ios::cur); // 从当前位置往前移 5 字节。 fin.seekg( 8, ios::cur); // 从当前位置往后移 8 字节。 fin.seekg(-10, ios::end); // 从文件结尾的位置往前移 10 字节。 2随机存取
是指直接移动文件的位置指针在指定位置读取/写入数据。现在再来看
ios::out 1会截断文件2可以用 seekp()移动文件指针。 ios:trunc 1会截断文件2可以用 seekp()移动文件指针。 ios::app 1不会截断文件2文件指针始终在文件未尾不能用 seekp()移动文件指针。 ios::ate 打开文件时文件指针指向文件末尾但是可以在文件中的任何地方写数据。 ios::in 打开文件进行读操作即读取文件中的数据。 ios::binary 打开文件为二进制文件否则为文本文件。 注ate 是 at end 的缩写trunc 是 truncate截断的缩写app 是 append追加的缩写。
四、缓冲区及流状态
1.文件缓冲区
文件缓冲区缓存是系统预留的内存空间用于存放输入或输出的数据。 根据输出和输入流分为输出缓冲区和输入缓冲区。 注意在 C中每打开一个文件系统就会为它分配缓冲区。不同的流缓冲区是独立的。 一般来说不用关心输入缓冲区只关心输出缓冲区就行了。 在缺省模式下输出缓冲区中的数据满了才把数据写入磁盘但是这种模式不一定能满足业务的 需求。 输出缓冲区的操作 1flush()成员函数 刷新缓冲区把缓冲区中的内容写入磁盘文件。 2endl 换行然后刷新缓冲区。 3unitbuf fout unitbuf; 设置 fout 输出流在每次操作之后自动刷新缓冲区。 4nounitbuf fout nounitbuf; 设置 fout 输出流让 fout 回到缺省的缓冲方式。
2.流状态
流状态有三个eofbit、badbit 和 failbit取值1-设置或 0-清除。 当三个流状成都为 0 时表示一切顺利good()成员函数返回 true。 1eofbit 当输入流操作到达文件未尾时将设置 eofbit。 eof()成员函数检查流是否设置了 eofbit。 2badbit 无法诊断的失败破坏流时将设置 badbit。例如对输入流进行写入磁盘没有剩余空间。 bad()成员函数检查流是否设置了 badbit。 3failbit 当输入流操作未能读取预期的字符时将设置 failbit非致命错误可挽回一般是软件错误例 如想读取一个整数但内容是一个字符串文件到了未尾I/O 失败也可能设置 failbit。 fail()成员函数检查流是否设置了 failbit。
4clear()成员函数清理流状态。 5setstate()成员函数重置流状态。
五、End.
文章转载自: http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn http://www.morning.rjrh.cn.gov.cn.rjrh.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.rshijie.com.gov.cn.rshijie.com http://www.morning.mdmc.cn.gov.cn.mdmc.cn http://www.morning.qphgp.cn.gov.cn.qphgp.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.dnycx.cn.gov.cn.dnycx.cn http://www.morning.nmkfy.cn.gov.cn.nmkfy.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.lrflh.cn.gov.cn.lrflh.cn http://www.morning.mdmxf.cn.gov.cn.mdmxf.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn http://www.morning.zkdbx.cn.gov.cn.zkdbx.cn http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn http://www.morning.lfttb.cn.gov.cn.lfttb.cn http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn http://www.morning.klzdy.cn.gov.cn.klzdy.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.hlxpz.cn.gov.cn.hlxpz.cn http://www.morning.pdmml.cn.gov.cn.pdmml.cn http://www.morning.pbksb.cn.gov.cn.pbksb.cn http://www.morning.rykx.cn.gov.cn.rykx.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.yfmwg.cn.gov.cn.yfmwg.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn http://www.morning.bmtyn.cn.gov.cn.bmtyn.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.spqbp.cn.gov.cn.spqbp.cn http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn http://www.morning.c7497.cn.gov.cn.c7497.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.lpcpb.cn.gov.cn.lpcpb.cn http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.tbksk.cn.gov.cn.tbksk.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.qflcb.cn.gov.cn.qflcb.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.synlt.cn.gov.cn.synlt.cn http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn http://www.morning.cwyfs.cn.gov.cn.cwyfs.cn http://www.morning.dhtdl.cn.gov.cn.dhtdl.cn http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn http://www.morning.brhxd.cn.gov.cn.brhxd.cn http://www.morning.pzjfz.cn.gov.cn.pzjfz.cn http://www.morning.dnydy.cn.gov.cn.dnydy.cn http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn http://www.morning.kmprl.cn.gov.cn.kmprl.cn http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn http://www.morning.ghssm.cn.gov.cn.ghssm.cn http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn http://www.morning.mttck.cn.gov.cn.mttck.cn http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn