emmm,错误地方还请指出(以下代码复制粘贴会报错,我用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个开始定位

哇,终于写完了,希望大家可以帮我指出错误,因为我也是刚学文件操作,最后,谢谢大家看我的博客,谢谢~

最新文章

  1. Scorpio-CSharp总链接
  2. hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
  3. hdu 4389 数位dp
  4. 分布式Hadoop安装(二)
  5. CEPH块设备创建及快照
  6. JAVA操作数组
  7. css选择器,用来处理隔行变色的表格
  8. Laravel 5 基础(二)- 路由、控制器和视图简介
  9. BIOS
  10. Page_Prerender介绍
  11. error LNK2019: 解析的外部符号 __imp__DispatchMessageW@4,在函数的符号 _WinMain@16 据引述
  12. C++builder编译别人工程报错
  13. Docker存储驱动之ZFS简介
  14. seg:NLP之正向最大匹配分词
  15. HDU3032 Nim or not Nim?
  16. python:序列化与数据持久化
  17. openLayer3地图的使用心得
  18. go语言net包rpc远程调用的使用
  19. 【LeetCode】213. House Robber II
  20. 教你如何制作饼干icon教程

热门文章

  1. ssh问题:ssh_exchange_identification: Connection closed by remote host
  2. maintenance
  3. Python算法(一)冒泡排序
  4. pandas数据处理攻略
  5. Jenkins安装部署(二)
  6. Shell教程 之test命令
  7. oracle 中从某天到某天一天一次执行某个函数
  8. windows phpstudy如何扩展MongoDB
  9. HDU 1698 Just a Hook(线段树区间更新查询)
  10. TZOJ 3305 Hero In Maze II(深搜)