存储本地txt文件——巧妙做法(内存拷贝)

最近在写一个读写本地txt文件的时候, 遇到了一个麻烦,因为之前vc项目,上面没有问题,

移到新项目工程的时候,突然CString无法使用,加入afx.h 又和 不能重复包含 windows.h 头文件

之前的做法是:

 1 class ParamClass
 2 {
 3 public:
 4 
 5     int m_1;
 6     int m_2;
 7     int m_3;
 8     int m_4;
 9     int m_5;
10     int m_6;
11 
12     bool WriteToFile(string str_current_model)
13     {
14         string file_name = str_current_model + "\\param01.txt";
15         CString file_name1 = file_name.c_str();
16 
17         CStdioFile file1;
18         if (!file1.Open(file_name1, CStdioFile::modeCreate | CStdioFile::modeWrite, NULL))
19             return false;
20         
21         CString val;
22         val.Format("%d\n", m_1);
23         file1.WriteString(val);
24         val.Format("%d\n", m_2);
25         file1.WriteString(val);
26         val.Format("%d\n", m_3);
27         file1.WriteString(val);
28         val.Format("%d\n", m_4);
29         file1.WriteString(val);
30         val.Format("%d\n", m_5);
31         file1.WriteString(val);
32         val.Format("%d\n", m_6);
33         file1.WriteString(val);
34 
35         file1.Close();
36 
37         return true;
38     }
39 
40     bool ReadFromFile(string str_current_model)
41     {
42         string file_name = str_current_model + "\\param01.txt";
43         CString file_name1 = file_name.c_str();
44 
45         CStdioFile file1;
46         if (!file1.Open(file_name1, CStdioFile::modeRead | CStdioFile::shareExclusive, NULL))
47             return false;
48 
49         CString val[6];
50         int i = 0;
51         while (i < 6 && file1.ReadString(val[i++]))
52         {
53             
54         }
55 
56         m_1 = atoi(val[0]);
57         m_2 = atoi(val[1]);
58         m_3 = atoi(val[2]);
59         m_4 = atoi(val[3]);
60         m_5 = atoi(val[4]);
61         m_6 = atoi(val[5]);
62 
63         file1.Close();
64 
65         return true;
66     }
67 };

 

因为比较着急,所以想着直接用cpp的库函数来写,百度找了找,拼凑起来以后,是下面这样的,

 1 #pragma once
 2 //craigtao 2018-8-2
 3 
 4 #include <iostream>
 5 #include<fstream>  
 6 #include<string>
 7 
 8 using namespace std;
 9 
10 class CModelParam0x
11 {
12 public:
13 
14     string m_sCurrExePath;
15     string m_sCurrModel;
16 
17     int m_1;
18     int m_2;
19     int m_3;
20     int m_4;
21     int m_5;
22 
23     bool _write_2_file(string path)
24     {
25         ofstream of(str_current_path, ios::out);
26         of << m_1 << endl;
27         of << m_2 << endl;
28         of << m_3 << endl;
29         of << m_4 << endl;
30         of << m_5;
31 
32         of.close();
33 
34         return true;
35     }
36 
37     bool _read_from_file(string path)
38     {
39         int temp1, m;
40         string s;
41         char buffer[30];
42         ifstream fin;
43 
44         fin.open(str_current_path, ios::in);
45         if (!fin.is_open()) {
46             cout << "Error opening file"; exit(1);
47         }
48         
49         int val[5];
50         int i = 0;
51 
52         while (!fin.eof()) {
53             std::getline(fin, s);
54             m = atoi(s.substr(0, 6).c_str());
55             val[i++] = m;
56         }
57 
58         fin.clear();
59         fin.close();
60 
61         m_1 = val[0];
62         m_2 = val[1];
63         m_3 = val[2];
64         m_4 = val[3];
65         m_5 = val[4];
66 
67         return true;
68     }
69 };

以为这样很简洁了,没想到还有这么一招,看了这一招以后,对自己的计算机素养感到很惭愧,

 

1 struct Param
2 {
3     int m_1;
4     int m_2;
5     int m_3;
6 };

Param m_Param;
1 FILE *pFile = fopen("para.txt", "rb");
2 if (pFile) {
3    BYTE BUff[512] = "";
4    fread(BUff, sizeof(Param), 1, pFile);
5    memcpy(&m_Param, BUff, sizeof(Param));
6    fclose(pFile);
7 }
1 FILE *pFile = fopen("para.txt", "wb");
2 if (pFile) {
3     fwrite(&m_Param, sizeof(Param), 1, pFile);
4     fclose(pFile);
5 }

这样写入到txt文件中的内容,使用记事本直接打开的话,是一些字符,不是显示代码中实际的值

及简洁又快速,佩服,

希望看到博文的朋友能分享自己使用的一些方法,god bless you!

posted @ 2018-08-03 14:36  仆人  阅读(1233)  评论(0编辑  收藏  举报