使用CStdioFile 讀寫UNICODE文件

2021-07-02 02:14:21 字數 4195 閱讀 8394

一:寫文件

1  建立文件並寫入內容

[cpp]view plain

copy

cstring filepath=l

"c:\\unicode.txt"

;  cstdiofile wfile;  

if(!wfile.open(filepath,cfile::modecreate|cfile::modewrite|cfile::typebinary))  

word

sign=0xfeff; 

// unicode文件 標誌

wfile.write(&sign,2);  

cstring filecontent;  

filecontent=l"unicode文件"

;  wfile.write(filecontent.getbuffer(),filecontent.getlength()*2);  

filecontent.releasebuffer();  

wfile.close();  

[cpp]view plain

copy

word

sign=0xfeff;  

wfile.write(&sign,2);  

//遍歷list容器  寫入檔案

list::iterator it=filelist.begin();  

for(it=filelist.begin();it!=filelist.end();it++)  

wfile.close();  

2  判斷文件是否存在,若存在,則在文件末尾新增內容,若不存在,重新建立

[cpp]view plain

copy

cstring filepath=l

"c:\\test.txt"

;  cstdiofile wfile;  

cfilefind filefind;  

if(!filefind.findfile(filepath) 

// 查詢檔案是否存在

else

if(!wfile.open(filepath,cfile::modewrite|cfile::modenotruncate|cfile::typebinary))  

return

;  word

sign;  

wfile.seektobegin();  

wfile.read(&sign,2);  

if(sign!=0xfeff)  

wfile.seektoend();  

cstring  str=l"新增到文件末尾"

;  wfile.write(str.getbuffer(),str.getlength()*2);  

str.releasebuffer();  

wfile.close();  

二 讀文件:

1 使用read函式 讀取文件 ,並將讀取到的內容轉換為cstring 以方便處理

[cpp]view plain

copy

cstring    filepath;    

cstdiofile wfile;  

filepath=l"c:\\test.txt"

;  if

(!wfile.open(filepath,cfile::moderead|cfile::typebinary))      

ulonglong

len=wfile.getlength();  

byte *pbyte=null;  

if(len>0)  

else

}else

cstring buf=(wchar

*)pbyte; 

// 將陣列轉換為 cstring型別

wfile.close();  

// 其他操作

//...

//delete

pbyte; 

// 釋放資源

2 使用 readstring  讀取一行文字

virtual lptstr readstring(

lptstrlpsz,

uintnmax);

virtual bool readstring(

cstring&rstring);

// 讀取到換行符\n為止,且讀取的字元少於nmax-1時,將換行符 \n 儲存到緩衝區中

注意:

the cstring version of this function removes the'\n'if present; the lptstr version does not.

readstring(cstring & rstring)  中, rstring   為:  一行文字+結尾符       

但結尾是 回車符 '\r'  而不是'\r\n'

因此,若想得到這一行資料,還必須將結尾符去掉方可。

示例:[cpp]view plain

copy

word

sign;  

readfile.seektobegin();  

readfile.read(&sign,2);  

if(sign!=0xfeff)  

else

}  乙個綜合例子:

[cpp]view plain

copy

cfiledialog  dlg(    

true,    

_t("*"

),     

_t("*.txt"

),    

ofn_filemustexist|ofn_hidereadonly|ofn_allowmultiselect,     

_t("all files(*.txt|*.txt||)"

)   

);    

tchar

szbuffer[1024];    

szbuffer[0]=0;    

dlg.m_ofn.lpstrfile = szbuffer;    

dlg.m_ofn.nmaxfile = 1024;    

if(idok==dlg.domodal())    

ulonglong

len=wfile.getlength();  

cstring  strtxt;  

byte *pbyte=null;  

if(len>0)  

else

}  cstring buf=(wchar

*)pbyte;  

wfile.close();  

if(!wfile.open(filepath,cfile::modereadwrite|cfile::typebinary|cfile::modecreate))   

wfile.seektobegin();  

word

sign=0xfeff;  

wfile.write(&sign,2);  

wfile.write(buf.getbuffer(),buf.getlength()*2);  

wfile.close();  

delete

pbyte;  

}    

}       

**:

自己遇到的小問題:

1. 字串不能太長,太長可能會導致字串錯誤

2. 在vs下處理的時候最好都用_t使其支援unicode

使用CStdioFile讀寫檔案

cstdiofile類的宣告儲存在afx.h標頭檔案中。cstdiofile類繼承自cfile類,cstdiofile物件表示乙個用執行時的函式fopen開啟的c執行時的流式檔案。流式檔案是被緩衝的,而且可以以文字方式 預設 或者二進位制方式開啟。cstdiofile類不支援cfile類中的dupl...

使用CStdioFile操作檔案

檔案操作在vc程式設計中使用非常普遍,直接使用cfile對檔案進行操作比較繁瑣,使用繼承自cfile的cstdiofile類就要容易得多,用cstdiofile 來處理字串,是最簡單最好理解的的辦法。本文整理了網上大家使用的各種cstdiofile的操作方法,歸納如下 1.開啟檔案 file.ope...

微控制器控制U盤 微控制器讀寫U盤 高速U盤讀寫模組

微控制器讀寫u盤的模組 usb118 不用電腦也能讀寫u盤中的檔案!型 號 usb118ad usb118a 簡 介 目前,基於usb2.0介面的移動儲存裝置已經被廣泛使用,尤其是採用usb flash技術的u盤產品的容量由幾年前的16m增加到現在的4g以上。我們知道,u盤通常是作為計算機的外部儲存...