1. 程式人生 > >Cpp讀寫文件、CString轉String、String轉CString

Cpp讀寫文件、CString轉String、String轉CString

UNC empty quest .html cto EDA stdstring log mfcc

場景

C++讀取文件

技術點

讀取文件

fstream提供了三個類,用來實現c++對文件的操作。(文件的創建、讀、寫)。

ifstream -- 從已有的文件讀入
ofstream -- 向文件寫內容
fstream - 打開文件供讀寫

文件打開模式:

ios::in             只讀
ios::out            只寫
ios::app            從文件末尾開始寫,防止丟失文件中原來就有的內容
ios::binary         二進制模式
ios::nocreate       打開一個文件時,如果文件不存在,不創建文件
ios::noreplace      打開一個文件時,如果文件不存在,創建該文件
ios::trunc          打開一個文件,然後清空內容
ios::ate            打開一個文件時,將位置移動到文件尾

文件指針位置在c++中的用法:

ios::beg   文件頭
ios::end   文件尾
ios::cur   當前位置

例子:
移動的是字節,不是行。

file.seekg(0,ios::beg);   //讓文件指針定位到文件開頭 
file.seekg(0,ios::end);   //讓文件指針定位到文件末尾 
file.seekg(10,ios::cur);   //讓文件指針從當前位置向文件末方向移動10個字節 
file.seekg(-10,ios::cur);   //讓文件指針從當前位置向文件開始方向移動10個字節 
file.seekg(10,ios::beg);   //讓文件指針定位到離文件開頭10個字節的位置

常用的錯誤判斷方法:

good()   如果文件打開成功
bad()   打開文件時發生錯誤
eof()    到達文件尾

按行讀取文件

const int bufsize = 512;
wchar_t strbuf[bufsize];
//
while (!file_.eof())
{
    file_.getline(strbuf, bufsize);
}

String轉CString

c_str()函數返回一個指向正規c字符串的指針,內容和string類的本身對象是一樣的,通過string類的c_str()函數能夠把string對象轉換成c中的字符串的樣式

CString strMfc; 
std::string strStl=“test“; 
strMfc=strStl.c_str(); 

CString轉String

CString到std::string:

CString cs("Hello");
std::string s((LPCTSTR)cs);

由於std::string只能從LPSTR/ 構造LPCSTR,使用VC ++ 7.x或更高版本的程序員可以使用轉換類,例如作為CT2CA中介。

CString cs ("Hello");
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);

代碼

按行讀取文本文件

- 使用方式

vector<wstring> vecResult; // 文件讀取的結果
wstring filename;          // 文件路徑
Cpp_read_file(vecResult, filename);
        
        
- MFC

int CMFCClistDlg::Cpp_read_file(vector<string> &result, string szFile)
{
    //清空原始值
    result.clear();
    
    ifstream file_(szFile.c_str(), std::ios::in);

    const int bufsize = 512;
    char strbuf[bufsize];
    // 讀到文件末尾
    while (!file_.eof())
    {
        file_.getline(strbuf, bufsize);

        string sentence = strbuf;
        
    
        if (sentence.empty())
        {
            continue;
        }
        result.push_back(sentence);
    }
    file_.close();
    //如果結果值為空,返回-1
    if(result.size()<1)
    {
        return -1;
    }
    return 0;
}

參考

C++讀寫TXT文件中的string或者int型數據以及string流的用法

https://www.cnblogs.com/1242118789lr/p/6885691.html

如何將CString和:: std :: string :: std :: wstring互相轉換?

https://stackoverflow.com/questions/258050/how-to-convert-cstring-and-stdstring-stdwstring-to-each-other

Cpp讀寫文件、CString轉String、String轉CString