MFC的文件操作


總結一下最近使用MFC寫入文件的感想和知識的記錄。

 之前也講過文件的打開和保存問題,這里算是一個小總結。

1.在指定路徑文件中保存數據(若該路徑文件不存在,則自動創建)

1 CString filePath = _T("F:\\VS\\Data.txt"); //保存文件的路徑和文件名
2 CStdioFile myFile; //操作文件默認的是Text模式
3 CFileException fileException;
4 if (myFile.Open(filePath, CFile::typeText | CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate), &fileException)
5 {        
6        //寫入文件
7 }
8 else
9     TRACE("Can't open file %s,error=%u\n", filePath, fileException.m_cause);//異常處理

這里要注意一下CFile::modeNoTruncate的使用,通常用modeCreate模式創建和打開一個文件,假如這個文件已經存在,則會清空這個已經存在的文件內容再進行寫入,但加上modeNoTruncate的話,就不會清空這個文件了。然后寫入前添加myFile.SeekToEnd(),直接在文件末尾開始寫入。

2.寫入數據的幾種方法

(1)原數據類型為CString,CStdioFile創建文件myFile:

直接使用語句 myFile.WriteString(saveData);

(2)原數據類型為CString,CFile創建文件myFile:

1 //將CString轉為char(m_receive為保存的數據)
2 static char str[] = ""; int count = m_receive.GetLength();  
3 for (int i = 0; i < count; i++)
4       str[i] = m_receive[i];
5 myFile.Write(str, strlen(str)); //寫入文件
6 myFile.Flush(); //立即寫入,不緩沖
7 myFile.Close(); //文件操作結束關閉*/

(3)在文件中保存中文字符(將Unicode字符轉為utf-8字符)

(這是也是我最后的實現目標,所有把完整的代碼寫一下)

 1     CString filePath = _T("F:\\VS\\Data.txt"); //保存文件的路徑和文件名
 2     CStdioFile myFile; //操作文件默認的是Text模式
 3     CFileException fileException;
 4     if (myFile.Open(filePath, CFile::typeText | CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate), &fileException)
 5     {        
 6         //將Unicode字符轉為utf-8字符,這樣才能正常顯示中文
 7         DWORD dwFileLen = myFile.GetLength();
 8         if (dwFileLen == 0)
 9         {
10             const unsigned char LeadBytes[] = { 0xEF, 0xBB, 0xBF };
11             myFile.Write(LeadBytes, sizeof(LeadBytes));
12         }
13         int nSrcLen = (int)wcslen(saveData);
14         CStringA utf8String(saveData);
15         int nBufLen = (nSrcLen + 1) * 6;
16         LPSTR buffer = utf8String.GetBufferSetLength(nBufLen);
17         int nLen = AtlUnicodeToUTF8(saveData, nSrcLen, buffer, nBufLen);
18         //AtlUnicodeToUTF8()需頭文件:<atlenc.h>。功能:將unicode轉換成utf-8
19         buffer[nLen] = 0;
20         utf8String.ReleaseBuffer();
21         myFile.SeekToEnd();
22         myFile.Write(utf8String.GetBuffer(), nLen);
23         myFile.Flush(); //立即寫入,不緩沖
24         myFile.Close(); //文件操作結束關閉
25     }
26     else
27         TRACE("Can't open file %s,error=%u\n", filePath, fileException.m_cause);//異常處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM