当前位置:   article > 正文

【C++】文件操作_c++file open

c++file open

目录

一、文本文件

1、写文件

2、文件打开方式

3、读文件

二、二进制文件

1、写文件

2、读文件


一、文本文件

程序运行产生的数据都是临时数据,程序结束就被释放

通过文件可以将数据持续化

-

C++中文件操作需要包含头文件 <fstream>

-

文件分为两种:

  1. 文本文件:以文本的 ASCII码 形式存储
  2. 二进制文件:以文本的 二进制 形式存储(用户不能直接读懂)

-

操作文件的三大类:

  1. ofstream --- 写操作(out  file,从程序写入到文件)
  2. ifstream  --- 读操作(in  file,从文件写入程序)
  3. fstream   --- 读写操作

1、写文件

步骤:

①、包含头文件

#include<fstream>

②、创建流对象

ofstream ofs;

③、打开文件

ofs.open("文件路径", 打开方式);

④、写数据

ofs << "写入的数据";

⑤、关闭文件

ofs.close();

2、文件打开方式

打开方式作用
ios::in为读文件而打开文件
ios::out为系文件而打开文件
ios::ate初始位置:文件尾
ios::app追加的方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

文件打开方式可以配合使用,需要使用操作符 | 按位或

例如:二进制方式写文件:ios::binary | ios::out

测试代码:

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. void test(){
  5. // 创建文件流对象
  6. ofstream ofs;
  7. // 打开文件
  8. ofs.open("text.txt", ios::out);
  9. // 写入文件
  10. ofs << "The hardest thing is to insist" << endl;
  11. // 关闭文件
  12. ofs.close();
  13. }
  14. int main() {
  15. test();
  16. system("pause");
  17. return 0;
  18. }

运行结果:

3、读文件

步骤(与写文件相似,但读取方式较多)

①、包含头文件

#include<fstream>

②、创建流对象

ifstream ifs;

③、打开文件并判断文件是否打开成功

ifs.open("文件路径", 打开方式);

④、读数据

        四种读取方式

        第一种方式:创建一个数组去接受从文件中读取的内容(空格读取不了)

  1. char buf[1024] = { 0 };
  2. while (ifs >> buf)
  3. {
  4. cout << buf << endl;
  5. }

        第二种方式:ifs 有成员函数getline (获取一行) ,可以读取到空格

  1. char buf[1024];
  2. while (ifs.getline(buf, sizeof(buf))) // 参数:写入地址,写入大小
  3. {
  4. cout << buf << endl;
  5. }

        第三种方式: 读到 string 中,需要用到头文件<string>里的函数getline 

  1. string buf;
  2. while (getline(ifs, buf))
  3. {
  4. cout << buf << endl;
  5. }

         第四种方式:创建一个字符变量,每次读一个字符,直到文件结尾(EOF

  1. char c;
  2. while ((c = ifs.get()) != EOF) // end of file
  3. {
  4. cout << c;
  5. }

⑤、关闭文件

ifs.close();

补充:ifs.is_open() 判断文件是否打开,返回类型是 bool 打开失败返回 false,打开成功返回 true


二、二进制文件

以二进制的方式对文件进行读写操作

打开方式指定为:ios::binary

1、写文件

二进制方式写文件只要利用流对象调用成员函数 write

-

函数原型:ostream&  write(const  char*  buffer,  int  len);

-

参数:字符指针 buffer 指向内存中的一段存储空间。len 是写的字节数 

测试代码:

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. class Person{
  5. public:
  6. char m_Name[64];
  7. int m_Age;
  8. };
  9. void test(){
  10. // 创建流对象,可以在创建时就指定打开方式
  11. // 二进制写入文件
  12. ofstream ofs("test.txt", ios::out | ios::binary);
  13. Person p = { "李华", 18 };
  14. // 写文件
  15. ofs.write((const char*)&p, sizeof(Person));
  16. // 关闭文件
  17. ofs.close();
  18. }
  19. int main() {
  20. test();
  21. system("pause");
  22. return 0;
  23. }

运行结果:

2、读文件

二进制方式读文件主要利用流对象调用成员函数 read 

-

函数原型:istream&  read (char*  buffer,  int  len);

-

参数:字符串指针 buffer 指向内存中的一段存储空间。len 是读的字节数

测试代码:

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. class Person{
  5. public:
  6. char m_Name[64];
  7. int m_Age;
  8. };
  9. void test(){
  10. // 创建流对象,二进制读取文件
  11. ifstream ifs("test.txt", ios::out | ios::binary);
  12. // 判断是否打开成功
  13. if ((ifs.is_open()) == false)
  14. {
  15. cout << "文件打开失败" << endl;
  16. return; // 打开失败结束
  17. }
  18. Person p;
  19. //读文件
  20. ifs.read((char*)&p, sizeof(Person));
  21. cout << p.m_Name << endl;
  22. cout << p.m_Age << endl;
  23. //关闭文件
  24. ifs.close();
  25. }
  26. int main() {
  27. test();
  28. system("pause");
  29. return 0;
  30. }

运行结果:


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/222921
推荐阅读
相关标签
  

闽ICP备14008679号