網站首頁 編程語言 正文
寫文件
預期效果:
當點擊確定時彈出“是否替換”提示框,指的是是否替換原來文本里的內容。
1.添加相應菜單以及ID
在菜單欄中添加相應菜單及其ID,并在view.cpp中添加相應的事件處理函數
2.完善相應的事件響應函數
這是我們寫文件函數代碼
void Cdraw3View::OnWriteFile()
{
//要寫入的內容
CString str = _T("hello,world");
//打開文件對話框,TRUE為讀,FALSE為寫
CFileDialog fileDlg(FALSE);
//判斷用戶點擊的是確定還是取消
if (IDOK == fileDlg.DoModal()) {
//獲取對話框返回的文件名
CString fileName = fileDlg.GetPathName();
//打開文件,以寫入模式打開,如果不存在則創建
CFile file(fileName, CFile::modeWrite | CFile::modeCreate);
//寫入文件,第一個參數是寫入內容,第二個參數是寫入內容的長度
file.Write(str, str.GetLength());
//關閉文件
file.Close();
}
}
3.進行調試測試
該段代碼是往打開文件里寫入hello,world,但是執行后我們打開文檔發現并沒有全部寫入,而是只寫了一部分
這是因為我們編譯器使用的是unicode編碼,而unicode編碼的英文字符是占兩個字節,我們在寫函數里傳入的字符長度只能向文件寫入一半的字符
4.根據測試結果進行相應的修改
更改方法可以是將長度再×一個sizeof(TCHAR),TCHAR是MFC規定的一個類型定義,如果是unicode字符集,TCHAR是兩個字節;其他模式則可能是一個字節
//寫入文件,第一個參數是寫入內容,第二個參數是寫入內容的長度
file.Write(str, str.GetLength()*sizeof(TCHAR));
再次調試檢測
讀文件
預期效果
1.為讀文件添加事件響應函數
2.完善事件響應函數的代碼
void Cdraw3View::OnReadFile()
{
CFileDialog fileDlg(TRUE);
if (IDOK == fileDlg.DoModal()) {
//獲得文件路徑
CString path = fileDlg.GetPathName();
//以只讀方式打開
CFile file(path, CFile::modeRead);
//設置一個讀取緩沖區
TCHAR* pBuf;
//獲得文件內容長度
int cnt = file.GetLength();
//根據對應字符編碼模式下的sizeof(TCHAR),計算有多少個字符
int chars = cnt / sizeof(TCHAR);
//為緩沖區分配大小,+1操作是為了在結尾加一個結束符
pBuf = new TCHAR[chars + 1];
//第一個是將讀到的內容放入的地方,第二個是讀取的長度
file.Read(pBuf, cnt);
//結尾+一個結束符
pBuf[chars] = 0;
//將讀到的內容彈出
MessageBox(pBuf);
//關閉文件
file.Close();
//文檔關閉后釋放申請的空間
delete[] pBuf;
}
}
3.調試測試?
原文鏈接:https://blog.csdn.net/qq_54169998/article/details/125674965
相關推薦
- 2022-08-02 利用Redis進行數據緩存的項目實踐_Redis
- 2022-08-22 C++貪心算法處理多機調度問題詳解_C 語言
- 2022-10-15 C++算法實現leetcode?1252奇數值單元格數目_C 語言
- 2022-07-12 mongoDB復雜查詢實例(嵌套多個數組和正則表達式使用)
- 2022-11-05 替代pod?update速度慢的lg_pod_plugin安裝使用詳解_IOS
- 2023-08-13 什么是單點登錄?
- 2022-06-10 解決Qt設置QTextEdit行高的問題_C 語言
- 2022-06-12 ASP.NET?Core?WebApi返回結果統一包裝實踐記錄_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支