日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

基于MFC實(shí)現(xiàn)單個(gè)文檔的文件讀寫_C 語言

作者:霸道小明 ? 更新時(shí)間: 2022-09-01 編程語言

寫文件

預(yù)期效果:

當(dāng)點(diǎn)擊確定時(shí)彈出“是否替換”提示框,指的是是否替換原來文本里的內(nèi)容。

1.添加相應(yīng)菜單以及ID

在菜單欄中添加相應(yīng)菜單及其ID,并在view.cpp中添加相應(yīng)的事件處理函數(shù)

2.完善相應(yīng)的事件響應(yīng)函數(shù)

這是我們寫文件函數(shù)代碼

void Cdraw3View::OnWriteFile()
{
    //要寫入的內(nèi)容
    CString str = _T("hello,world");
    //打開文件對(duì)話框,TRUE為讀,F(xiàn)ALSE為寫
    CFileDialog fileDlg(FALSE);
    //判斷用戶點(diǎn)擊的是確定還是取消
    if (IDOK == fileDlg.DoModal()) {
        //獲取對(duì)話框返回的文件名
        CString fileName = fileDlg.GetPathName();
        //打開文件,以寫入模式打開,如果不存在則創(chuàng)建
        CFile file(fileName, CFile::modeWrite | CFile::modeCreate);
        //寫入文件,第一個(gè)參數(shù)是寫入內(nèi)容,第二個(gè)參數(shù)是寫入內(nèi)容的長度
        file.Write(str, str.GetLength());
        //關(guān)閉文件
        file.Close();
    }
}

3.進(jìn)行調(diào)試測(cè)試

該段代碼是往打開文件里寫入hello,world,但是執(zhí)行后我們打開文檔發(fā)現(xiàn)并沒有全部寫入,而是只寫了一部分

這是因?yàn)槲覀兙幾g器使用的是unicode編碼,而unicode編碼的英文字符是占兩個(gè)字節(jié),我們?cè)趯懞瘮?shù)里傳入的字符長度只能向文件寫入一半的字符

4.根據(jù)測(cè)試結(jié)果進(jìn)行相應(yīng)的修改

更改方法可以是將長度再×一個(gè)sizeof(TCHAR),TCHAR是MFC規(guī)定的一個(gè)類型定義,如果是unicode字符集,TCHAR是兩個(gè)字節(jié);其他模式則可能是一個(gè)字節(jié)

//寫入文件,第一個(gè)參數(shù)是寫入內(nèi)容,第二個(gè)參數(shù)是寫入內(nèi)容的長度
file.Write(str, str.GetLength()*sizeof(TCHAR));

再次調(diào)試檢測(cè)

讀文件

預(yù)期效果

1.為讀文件添加事件響應(yīng)函數(shù)

2.完善事件響應(yīng)函數(shù)的代碼

void Cdraw3View::OnReadFile()
{
    CFileDialog fileDlg(TRUE);
    if (IDOK == fileDlg.DoModal()) {
        //獲得文件路徑
        CString path = fileDlg.GetPathName();
        //以只讀方式打開
        CFile file(path, CFile::modeRead);
        //設(shè)置一個(gè)讀取緩沖區(qū)
        TCHAR* pBuf;
        //獲得文件內(nèi)容長度
        int cnt = file.GetLength();
        //根據(jù)對(duì)應(yīng)字符編碼模式下的sizeof(TCHAR),計(jì)算有多少個(gè)字符
        int chars = cnt / sizeof(TCHAR);
        //為緩沖區(qū)分配大小,+1操作是為了在結(jié)尾加一個(gè)結(jié)束符
        pBuf = new TCHAR[chars + 1];
        //第一個(gè)是將讀到的內(nèi)容放入的地方,第二個(gè)是讀取的長度
        file.Read(pBuf, cnt);
        //結(jié)尾+一個(gè)結(jié)束符
        pBuf[chars] = 0;
        //將讀到的內(nèi)容彈出
        MessageBox(pBuf);
        //關(guān)閉文件
        file.Close();
        //文檔關(guān)閉后釋放申請(qǐng)的空間
        delete[] pBuf;
    }
 
}

3.調(diào)試測(cè)試?

原文鏈接:https://blog.csdn.net/qq_54169998/article/details/125674965

欄目分類
最近更新