c++文件的输入输出

来源:互联网 发布:网络大电影成本 编辑:程序博客网 时间:2024/06/05 19:03

我也是萌新(刚学c++),错误地方请多指出(以下代码复制粘贴会报错,我用codeblocks测试过,不知道为什么qaq
头文件#include < fstream >
这里ofstream是”output file stream(输出文件流)”,是从内存到硬盘;ifstream是”input file stream(输入文件流)”,是从硬盘到内存
以写入文件的方式打开文件的方法用ofstream:
#include <fstream>
using namespace std;
int main()
{
  ofstream File("Hello World.txt");
  File.close();
  return 0;
}
File为一个文件句柄(对象),ofstream为写操作,这样就打开了一个名为”Hello World.txt”的文件,结尾的File.close()函数可以关闭这个文件
open()函数打开文件:
#include <fstream>
using namespace std;
int main()
{
 ofstream File;
 File.open("Hello World.txt");
 File.close();
 return 0;
}
open函数也可以打开文件,两种方法都可以,感觉没什么区别,然后我们讲打开模式
ofstream File(char *filename, int open_mode)同样还有ifstream,fstream
filename表示文件名称(一个字符串)
open_mode表示打开的模式
名称         描述
ios::in         以读取的方式打开文件
ios::out        以写入的方式打开文件
ios::out | ios::app   将数据追加到文件的结尾
ios::out | ios::trunc  以写入方式打开文件时首先截断(清空)文件内容
ios::binary      以二进制的方式打开文件,不加它默认文本方式
以写入文件的方式打开文件就可以这样写了:
fstream File(“Hello World.txt”, ios::out);
ios::out指以写入文件的模式打开文件
然后我们说怎么往文件中写入数据:
比如第一个程序,只需在打开文件之后,在下一行写入
File << “Hello world\n”; //向文件中写入了Hello world并换行
有点像cin,cin就是从键盘向程序中写入,File就是从程序往文件中输出
如果想输入变量等等,可以这么写:
int a = 5;
File << a; //这样文件中就有了5
接着我们说说怎样读取文件里的数据
#include <iostream>
#include <fstream>
using naemspace std;
int main()
{
 char ch;
 ofstream File1("Hello World.txt");
 File1 << "Hello World\n";
 File1.close();
 ifstream File2("Hello World.txt");
 while(!File2.eof())
 {
  File2.get(ch);
  cout << ch;
 }
 File2.close();
 return 0;
}
然后我们讲解这段程序,前面存入文件的部分你应该懂了,后面ifstream是读取文件File2.eof()函数意思是读取到文件末尾后返回一个非零值,我们用while(!File2.eof())就可以循环到文件的末尾,File.get(ch)函数是从文件流读取一个字符并存入到变量ch中,再次调用该函数它内置指针会指到下一个字符,然后我们就可以看到从显示屏看到文件中的字符了
不过,这样写感觉不好qaq,我喜欢一整行读取,也就是用getline()函数(不写头文件了,但需要iostream头文件(cout))
int main()
{
 static char arr[10] //静态的字符数组第一个字符为空;
 ofstream File1("Hello World.txt");
 File1 << "Hello World";
 File1.close();
 //读取到满足以下条件之一即可
 //1.读取了9个字符
 //2.遇到字母l
 //3.换行
 ifstream File2("Hello World.txt");
 File2.getline(arr, 7, 'l'); //最后2个参数可以任写一个,也可以都写
 cout << arr << endl;
 File2.close();
 return 0;
}
理解上面的程序,以后读取一行数据的时候就很方便了
如果你想要既能写入又能读取文件的操作,那么你可以这样写:
fstream File(“Hello World.txt”, ios::in | ios::out);中间的那个操作符 | 是c语言中按位或,意思是以读和写的方式打开文件,这样你既可以读也可以写了
如果你想用二进制方式对文件进行读/写,那么就要用ios::binary模式
在打开文件之前,我们还应该检查文件是否存在,以下是最常见的检查文件的方法(xfstream为ofstream,ifstream,fstream三者之一):
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
 xfstream File("Hello World.txt");
 if(!File)
 {
  cout << "Error opening the file!" << endl;
  exit(1);
 }
 File.close(); //如果存在则需要关闭文件
 return 0;
}
上面判断句里面的File是,如果文件存在返回文件的地址,如果文件不存在返回0
ofstream File1;
File1.open("Hello World.txt");
cout << File1.is_open() << endl;
ofstream File2;
cout << File2.is_open() << endl;
is_open()函数会判断文件句柄(对象)是否打开过文件,打开过返回1,没有打开过返回0
文件的读写:
1.get()和put()
ofstream &put(char ch)
ifstream &get(char &ch)
int main()
{
 fstream File("Hello World.txt", ios::out | ios::in);
 char ch;
 ch = 'o';
 File.put(ch);
 File.seekg(ios::beg);
 File.get(ch);
 cout << ch << endl;
 File.close();
 return 0;
}
2.read()和write()
read(unsigned char *buf,int num)
write(const unsigned char *buf,int num)
int main()
{
 fstream File("Hello World.txt", ios::in | ios::out);
 char arr1[20] = "Hello world\n";
 static char arr2[20];
 File.write(arr1, 8);
 File.seekg(ios::beg);
 File.read(arry2, 7);
 cout << arr2 << endl;
 return 0;
}
seekg()函数可以在读取文件时改变文本内置指针的位置
seekg(ios::beg)读取文件时将文本的内置指针指到文件的起始位置
还有seek(ios::end)文本末尾,seekg(-5)读取文件时定位到当前位置的前五个字符seekg(-5, ios::end)读取文件时定位到末尾的前5个字符
检查输入/输出的状态的函数:
1.bad()函数读写过程中出错返回true
2.eof()函数读到文件末尾返回true
3.fail()函数除了bad还有格式错误
4.good()函数以上没有返回true,则它返回true
如果发生错误,你必须使用clear()函数清除错误状态
以下代码供参考:
cout << File.good() << endl;
cout << File.bad() << endl;
File.clear(); //清除错误状态
最后我们再介绍一些函数:
seekp()函数,和前面所说的seekg()函数相似,但seekg()函数是读取文件的时候定位内置指针,而seekp()函数是写入文件的时候定位内置指针
flush()函数会将缓存区的数据在未满前提前写入磁盘中
peek()函数将返回输入流文件的下一个字符,但它不会移动内置指针的位置,而却它返回的是int型,如果想用char型,则需要这样写:char(File.peek())
putback()函数将返回最后一个所读取的字符,同时将内置指针所指的字符向后-1,如果你使用get()函数,再用putback()函数,再用get()函数,那么得到的字符还是同一个
tellg()函数为输入文件流时的内置指针位置
tellp()函数为输出文件流时的内置指针位置
ignore()函数读取文件时,可以略过一定数量的字符,用以下代码讲解:
int main()
{
 ifstream File("Hello World.txt");
 static char arr[20];
 File.ignore(6, 'e');
 File.read(arr, 20);
 cout << arr << endl;
 File.close();
 return 0;
}
ignore()函数从文件头开始定位,如果前·6个字符里面有’e’,则从’e’开始定位,否则从第6个开始定位
哇,终于写完了,希望大家可以帮我指出错误,因为我也是刚学文件操作,最后,谢谢大家看我的博客,谢谢~

原创粉丝点击