当前位置:   article > 正文

C++——文件操作_c++文件操作

c++文件操作

一、文本文件

C++中输入输出是通过流对象进行操作,对于文件来说写文件就是将内容从程序输出到文件,需要用到写文件流ofstream;而读文件就是将内容从文件输入到程序,需要用到读文件流ifstream;这两个文件流类都包含在头文件<fstream>中,对文件操作需要包含<fstream>。

(一)写文件

文本文件写入主要包括以下步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流对象: ofstream ofs;
  3. 以写入方式打开文件:ofs.open("文件路径",ios::out);
  4. 写入内容:ofs<<"写入内容";
  5. 关闭文件:ofs.close();
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. int main(int argc, char const *argv[]) {
  5. ofstream ofs;
  6. ofs.open("test.txt", ios::out);
  7. ofs << "姓名:张三" << endl;
  8. ofs << "年龄:20" << endl;
  9. ofs.close();
  10. return 0;
  11. }

(二)打开方式

打开方式描述
ios::in读取方式打开文件。若文件不存在打开失败
ios::out写入方式打开文件。若文件存在,清空后写入;文件不存在,创建后写入
ios::ate初始位置:文件末尾。单独使用或和ios::out合用没有区别:清空后写入或创建后写入;和ios::in合用,若文件存在末尾可写入,若文件不存在打开失败
ios::app末尾追加。单独使用或和ios::out/in合用没有区别:文件不存在时创建写入,存在时末尾追加;

ios::trunc

(截断)

单独或者和out合用与out无明显差别,文件存在清空后写入,不存在,创建写入;

ios::binary以二进制方式写入或读取文件

对于ate和trunc一直get不到使用场景,不太理解。

(三)读取文件

  1. 文本文件读取主要包含以下步骤:
  2. 包含头文件:#include<fstream>
  3. 创建流对象:ifstream ifs;
  4. 以读取模式打开文件:ifs.open("文件路径+文件名/文件名",ios::in)
  5. 读取数据:常用的有4中方法。
  •         ifs>> int,char,float,char *,string 等等。可读取整形、浮点型、字符型、字符串等等,读取字符串时可将读取内容存入字符数组,也可存入string;读取字符串时一次读一行,遇到空格、制表符、换行符或读取到字符数组长度-1个字符时返回。读取成功返回istream&,读取失败返回false。
  •         ifs.getline(char *buf,int size,char delim='\n');一次读取一行,存入字符数组;遇到换行符或者读取到sizeof(buf)-1个字符返回(最后一个字符需要自动添加结束字符\0);遇到限定字符delim提前返回。读取失败返回false。
  •         getline(istream& ifs,string& str,char delim='\n');一次读取一行,存入字符串;遇到换行符和限定字符delim提前返回。读取失败返回false。
  •         int get();/ istream& get(char *buf, int size,char delim='\n');/istream& get(char c)常用的ifstream成员get函数有这几种重载;同样读取内容存入字符数组时遇到限定字符delim时提前返回,后面两种读取失败返回false。
    1. #include<iostream>
    2. #include<fstream>
    3. using namespace std;
    4. #include<string>
    5. //写文件
    6. void write() {
    7. ofstream ofs("test.txt", ios::out);
    8. if (ofs.is_open()) {
    9. ofs << "姓名:张三" << endl;
    10. ofs << "年龄:20" << endl;
    11. ofs.close();
    12. }
    13. }
    14. //方法1
    15. void func(ifstream& ifs, char buf1[1024], string buf2) {
    16. //while (ifs >> buf1) {
    17. // cout << buf1 << endl;
    18. //}
    19. while (ifs >> buf2) {
    20. cout << buf2 << endl;
    21. }
    22. }
    23. //方法2
    24. void func(ifstream& ifs, char buf1[1024]) {
    25. while (ifs.getline(buf1, 1024)){
    26. cout << buf1 << endl;
    27. }
    28. }
    29. //方法3
    30. void func(ifstream& ifs, string& buf2) {
    31. while (getline(ifs, buf2)) {
    32. cout << buf2 << endl;
    33. }
    34. }
    35. //方法4
    36. void func(ifstream& ifs, char c) {
    37. while (ifs.get(c)) {
    38. cout << c;
    39. }
    40. }
    41. void doWork(char buf1[1024], string& buf2, char c ) {
    42. ifstream ifs("test.txt", ios::in);
    43. if (ifs.is_open()) {
    44. if (c == 1) {
    45. func(ifs, buf1, buf2);
    46. }else if (c == 2) {
    47. func(ifs, buf1);
    48. }
    49. else if (c == 3) {
    50. func(ifs, buf2);
    51. }
    52. else if (c == 4) {
    53. func(ifs, c);
    54. }
    55. ifs.close();
    56. }
    57. }
    58. int main(int argc, char const *argv[]) {
    59. char buf1[1024];
    60. string buf2;
    61. char c;
    62. write();
    63. doWork(buf1, buf2, 1);
    64. doWork(buf1, buf2, 2);
    65. doWork(buf1, buf2, 3);
    66. doWork(buf1, buf2, 4);
    67. return 0;
    68. }

二、二进制文件

(一)二进制文件写入

具体步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流:ofstream ofs;
  3. 以二进制方式打开文件:ofs.open("文件名",ios::binary|ios::out);
  4. 写入数据:调用成员函数ostream& write(const char * buffer,int len);                                                                                                                                            ofs.write((const char*)ptr,sizeof(*ptr)); 字符指针buffer指向内存中一段储存空间,len是要写入字节数。
  5. 关闭文件:ofs.close();

(二)二进制文件读取

具体步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流:ifstream ifs;
  3. 以二进制方式打开文件:ifs.open("文件名",ios::binary|ios::in);
  4. 读取数据:调用成员函数ifstream& read((char*)buf,sizeof(buf));    buf是读取内容的缓存区强转为(char*),按照单个字节计算读取内容。
  5. 关闭文件:ifs.close();
  1. #include<iostream>
  2. using namespace std;
  3. #include<fstream>
  4. #include<string>
  5. class Person {
  6. public:
  7. string m_Name;
  8. int m_Age;
  9. };
  10. void write(void) {
  11. Person p = { "李四",21 };
  12. ofstream ofs("test.dat", ios::binary | ios::out);
  13. if (ofs.is_open()) {
  14. ofs.write((char*)&p, sizeof(p));
  15. ofs.close();
  16. }
  17. }
  18. void read(void) {
  19. Person p;
  20. ifstream ifs("test.dat", ios::binary | ios::in);
  21. if (ifs.is_open()) {
  22. ifs.read((char*)&p, sizeof(p));
  23. ifs.close();
  24. }
  25. cout << "姓名:" << p.m_Name << endl;
  26. cout << "年龄:" << p.m_Age << endl;
  27. }
  28. void test(void) {
  29. write();
  30. read();
  31. }
  32. int main(int argc, char const** argv) {
  33. test();
  34. return 0;
  35. }

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

闽ICP备14008679号