一、读操作
文件类型分为两种
1.文本文件 文件以文本的ASCII码存贮在计算机中
2.二进制文件的二进制形式存储在计算机中,用户一般不能读懂他们
操作文件的三大类
1.ofstream 写操作
2.ifstream 读操作
3.fstream 读写操作
警记:路径中不能有中文名称
ifstream ifs;//读操作
ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in);//只读
//ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in | ios::out); 读写
//判断是否打开
if (!ifs.is_open())
{
cout << "failing to open" << endl;
return 0;
}
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
四种读操作:
//第一种
char buf[1024] = { 0 };
while (ifs>>buf)
{
cout << buf << endl;
}
第二种
char buf[1024] = { 0 };
while (ifs.getline(buf,sizeof(buf)))
{
cout << buf << endl;
}
第三种
string buf;
while (getline(ifs,buf))
{
cout << buf << endl;
}
第四种(不推荐使用,因为要一个一个遍历字符)
char c;
while ((c=ifs.get())!=EOF) //EOF end of file
{
cout << c;
}
在<**istream**>中的getline()函数有两种重载形式(第二种读操作):
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,
如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。
当第三个参数省略时,系统默认为'\0'
在<***string***>中的getline()函数有两种重载形式(第三种读操作)
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
ifstream的get()用法
get()函数比较灵活,有3种常用的重载形式,实际有6种重载:
int get();
istream& get ( char& c );
istream& get ( char* s, streamsize n );
istream& get ( char* s, streamsize n, char delim );
istream& get ( streambuf& sb);
istream& get ( streambuf& sb, char delim );
一种就是和put()对应的形式:ifstream &get(char &ch);
功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符
另一种重载形式的原型是: int get();
这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');
这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符
如果没使用 delim 这个参数,将使用缺省值换行符'\n'。
例如:
file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。
二、写操作
先写再读,记得关闭输入流
ofstream ofs;//写操作
ifstream ifs;//读操作
ofs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::out | ios::app);
if (!ofs.is_open())
{
cout << "failing to open" << endl;
return 0;
}
const char *buf = { "hello world" };
ofs.write(buf, sizeof(buf)+3);//此处sizeof为8,hello+空格+/n=8
ofs.close();
ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in);
if (!ifs.is_open())
{
cout << "failing to open" << endl;
return 0;
}
char buff[1024] = { 0 };
while (ifs >> buff)
{
cout << buff << endl;
}
ifs.close();
}