亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳解CFile與CStdioFile的文件讀寫使用方法

2020-02-24 14:28:26
字體:
來源:轉載
供稿:網友

cstdiofile類是從mfc文件類cfile派生的,它可以一行一行地讀寫文件,非常方便,今天武林技術頻道小編帶你詳解CFile與CStdioFile的文件讀寫使用方法,希望對你學習這方面知識有幫助!

CFile
//創建/打開文件

CFile file;
file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);

文件打開模式可組合使用,用“|”隔開,常用的有以下幾種:
CFile::modeCreate:以新建方式打開,如果文件不存在,新建;如果文件已存在,把該文件長度置零,即清除文件原有內容。

CFile::modeNoTruncate:以追加方式打開,如果文件存在,打開并且不將文件長度置零,如果文件不存在,會拋出異常。一般與CFile::modeCreate一起使用,則文件不存在時,新建一個文件;存在就進行追加操作。
CFile::modeReadWrite:以讀寫方式打開文件。
CFile::modeRead:只讀。
CFile::modeWrite:只寫。

//寫入數據
CString strValue = "Hello World!";
file.Write(strValue,strValue.GetLength());

//追加數據
file.SeekToEnd(); //將指針移至文件末尾進行追加
file.Write(strValue,strValue.GetLength());

//關閉文件
file.Close();

CStdioFile
CStdioFile是CFile的派生類,對文件進行流式操作,對于文本文件的讀寫很有用處,可按行讀取寫入。

//寫入數據
CString strValue = "Hello World!";
file.WriteString(strValue);

//讀取數據
CString strRead;
file.ReadString(strRead);

當文件存在多行數據需要逐行讀取時,可用函數BOOL CStdioFile::ReadString(CString& rString),當遇到"/n "時讀取截斷,如果文件未讀完,返回true,否則返回false。

//逐行讀取文件內容,存入strRead
while(file.ReadString(strRead))
{
?...;
}

各種關于文件的操作在程序設計中是十分常見,如果能對其各種操作都了如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的代碼,因而熟練的掌握文件操作是十分重要的。本文將對Visual C++中有關文件操作進行全面的介紹,并對在文件操作中經常遇到的一些疑難問題進行詳細的分析。

1.文件的查找
當對一個文件操作時,如果不知道該文件是否存在,就要首先進行查找。MFC中有一個專門用來進行文件查找的類CFileFind,使用它可以方便快捷地進行文件的查找。下面這段代碼演示了這個類的最基本使用方法。

?

CString strFileTitle;
CFileFind finder;
BOOL bWorking = finder.FindFile("C://windows//sysbkup//*.cab");
while(bWorking)
{
bWorking=finder.FindNextFile();
strFileTitle=finder.GetFileTitle();
}


2.文件的打開/保存對話框
讓用戶選擇文件進行打開和存儲操作時,就要用到文件打開/保存對話框。MFC的類CFileDialog用于實現這種功能。使用CFileDialog聲明一個對象時,第一個BOOL型參數用于指定文件的打開或保存,當為TRUE時將構造一個文件打開對話框,為FALSE時構造一個文件保存對話框。

在構造CFileDialog對象時,如果在參數中指定了OFN_ALLOWMULTISELECT風格,則在此對話框中可以進行多選操作。此時要重點注意為此CFileDialog對象的m_ofn.lpstrFile分配一塊內存,用于存儲多選操作所返回的所有文件路徑名,如果不進行分配或分配的內存過小就會導致操作失敗。下面這段程序演示了文件打開對話框的使用方法。

?

?

?


CFileDialog mFileDlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"All Files (*.*)|*.*||",AfxGetMainWnd());
CString str(" ",10000);
mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);
str.ReleaseBuffer();
POSITION mPos=mFileDlg.GetStartPosition();
CString pathName(" ",128);
CFileStatus status;
while(mPos!=NULL)
{
pathName=mFileDlg.GetNextPathName(mPos);
CFile::GetStatus( pathName, status );
}


3.文件的讀寫
文件的讀寫非常重要,下面將重點進行介紹。文件讀寫的最普通的方法是直接使用CFile進行,如文件的讀寫可以使用下面的方法:

//對文件進行讀操作
char sRead[2];
CFile mFile(_T("user.txt"),CFile::modeRead);
if(mFile.GetLength()<2)
return;
mFile.Read(sRead,2);
mFile.Close();

?

//對文件進行寫操作
CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);
mFile.Write(sRead,2);
mFile.Flush();
mFile.Close();

雖然這種方法最為基本,但是它的使用繁瑣,而且功能非常簡單。我向你推薦的是使用CArchive,它的使用方法簡單且功能十分強大。首先還是用CFile聲明一個對象,然后用這個對象的指針做參數聲明一個CArchive對象,你就可以非常方便地存儲各種復雜的數據類型了。它的使用方法見下例。

//對文件進行寫操作
CString strTemp;
CFile mFile;
mFile.Open("d://dd//try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
CArchive ar(&mFile,CArchive::store);
ar<<ar.Close();
mFile.Close();

//對文件進行讀操作
CFile mFile;
if(mFile.Open("d://dd//try.TRY",CFile::modeRead)==0)
return;
CArchive ar(&mFile,CArchive::load);
   ar>>strTemp;
???   ar.Close();
mFile.Close();

CArchive的 << 和>> 操作符用于簡單數據類型的讀寫,對于CObject派生類的對象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()還可以進行類的讀寫,如:

//存儲CAboutDlg類
ar.WriteClass(RUNTIME_CLASS(CAboutDlg));

//讀取CAboutDlg類
CRuntimeClass* mRunClass=ar.ReadClass();

//使用CAboutDlg類
CObject* pObject=mRunClass->CreateObject();
((CDialog* )pObject)->DoModal();

雖然VC提供的文檔/視結構中的文檔也可進行這些操作,但是不容易理解、使用和管理,因此雖然很多VC入門的書上花費大量篇幅講述文檔/視結構,但我建議你最好不要使用它的文檔。關于如何進行文檔/視的分離有很多書介紹,包括非常著名的《Visual C++ 技術內幕》。
如果你要進行的文件操作只是簡單的讀寫整行的字符串,我建議你使用CStdioFile,用它來進行此類操作非常方便,如下例。

?

CStdioFile mFile;
CFileException mExcept;
mFile.Open( "d://temp//aa.bat", CFile::modeWrite, &mExcept);
CString string="I am a string.";
mFile.WriteString(string);
mFile.Close();


4.臨時文件的使用
正規軟件經常用到臨時文件,你經常可以會看到C:/Windows/Temp目錄下有大量的擴展名為tmp的文件,這些就是程序運行是建立的臨時文件。臨時文件的使用方法基本與常規文件一樣,只是文件名應該調用函數GetTempFileName()獲得。它的第一個參數是建立此臨時文件的路徑,第二個參數是建立臨時文件名的前綴,第四個參數用于得到建立的臨時文件名。得到此臨時文件名以后,你就可以用它來建立并操作文件了,如:

?

?

?


char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];
GetTempPath(_MAX_PATH, szTempPath);
GetTempFileName(szTempPath,_T ("my_"),0,szTempfile);
CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);
char m_char='a';
m_tempFile.Write(&m_char,2);
m_tempFile.Close();


5.文件的復制、刪除等
MFC中沒有提供直接進行這些操作的功能,因而要使用SDK。SDK中的文件相關函數常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它們的用法很簡單,可參考MSDN。

?

1,判斷文件是否存在
? access(filename,mode);

2,對于不同用途又不同的文件操作,其中API函數CreateFile()也是比較有用處理方式,對于巨型文件很合適的其他的樓上的大都說了,不重復了.

[1]顯示對話框,取得文件名

?

CString FilePathName;
CFileDialog dlg(TRUE);///TRUE為OPEN對話框,FALSE為S***E AS對話框
if (dlg.DoModal() == IDOK)
??? FilePathName=dlg.GetPathName();


相關信息:CFileDialog 用于取文件名的幾個成員函數:
假如選擇的文件是C:/WINDOWS/TEST.EXE

(1)GetPathName();取文件名全稱,包括完整路徑。取回C:/WINDOWS/TEST.EXE
(2)GetFileTitle();取文件全名:TEST.EXE
(3)GetFileName();取回TEST
(4)GetFileExt();取擴展名EXE

?

[2]打開文件
CFile file("C:/HELLO.TXT",CFile::modeRead);//只讀方式打開
//CFile::modeRead可改為 CFile::modeWrite(只寫),
//CFile::modeReadWrite(讀寫),CFile::modeCreate(新建)
例子:

?

{
CFile file;
file.Open("C:/HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);
.
.
.
}


[3]移動文件指針
file.Seek(100,CFile::begin);///從文件頭開始往下移動100字節
file.Seek(-50,CFile::end);///從文件末尾往上移動50字節
file.Seek(-30,CFile::current);///從當前位置往上移動30字節
file.SeekToBegin();///移到文件頭
file.SeekToEnd();///移到文件尾

?

[4]讀寫文件
讀文件:
char buffer[1000];
file.Read(buffer,1000);
寫文件:
CString string("自強不息");
file.Write(string,8);

[5]關閉文件
file.Close();

本次是武林技術頻道小編給大家帶來的關于詳解CFile與CStdioFile的文件讀寫使用方法,希望這篇文章可以幫助到那些在程序員世界奮斗的你。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品中文字幕av| 欧美性猛交xxxx| 91亚洲精品一区| 黑人精品xxx一区一二区| 亚洲va欧美va在线观看| 日韩电影免费在线观看中文字幕| 狠狠色香婷婷久久亚洲精品| 精品久久久久久久久久国产| 最近的2019中文字幕免费一页| 成人在线观看视频网站| 久久久久久成人精品| 欧美日在线观看| 人人澡人人澡人人看欧美| 中文字幕亚洲精品| 91日韩在线视频| 亚洲电影在线看| 欧美多人乱p欧美4p久久| 亚洲aa中文字幕| 国产精品一区二区三区免费视频| 亚洲精品之草原avav久久| 亚洲国产精品美女| 91亚洲永久免费精品| 91成人在线播放| 国产91在线视频| 91在线视频免费| 亚洲精品999| 不卡av在线播放| 亚洲精品wwwww| 亚洲天堂开心观看| 欧美日韩一区二区在线| 日韩视频免费在线观看| zzijzzij亚洲日本成熟少妇| 国产精品96久久久久久| 国产精品www色诱视频| 91探花福利精品国产自产在线| 精品久久久久久久久久久久久久| 国产免费一区二区三区香蕉精| 亚洲护士老师的毛茸茸最新章节| 中文.日本.精品| 日韩美女免费视频| 日韩大片在线观看视频| 亚洲第一精品夜夜躁人人爽| 国产精品18久久久久久首页狼| 91av成人在线| 欧美午夜电影在线| 精品久久久久久国产91| 国模极品一区二区三区| 日本欧美黄网站| 日韩中文在线中文网三级| 成人欧美在线观看| 国内精品小视频| 日韩av高清不卡| 欧美日韩国产第一页| 日本亚洲精品在线观看| 91av视频在线观看| 国产日韩精品视频| 亚洲白拍色综合图区| 色无极亚洲影院| 91色视频在线观看| 精品日本高清在线播放| 日韩av在线网站| 久久久久99精品久久久久| 亚洲精品一区二区久| 国产日韩精品电影| 欧美精品激情在线| 国产成人精品视频| 亚洲性日韩精品一区二区| 国产欧美精品va在线观看| 亚洲精品国精品久久99热一| 久久精品成人欧美大片| 成人综合国产精品| 国产精品久久久久久久电影| 日韩精品免费一线在线观看| 在线观看国产精品日韩av| 欧美在线视频一二三| 国色天香2019中文字幕在线观看| 国产精品久久久久久久久久三级| 日韩综合视频在线观看| 久久资源免费视频| 日韩免费在线播放| 亚洲国产成人一区| 久久国产加勒比精品无码| 日韩av影院在线观看| 欧美中文在线字幕| 日韩欧美精品网址| 国产精品视频一| 欧美日韩成人在线播放| 欧美一区二区三区……| 国产91在线播放九色快色| 欧美日韩加勒比精品一区| 久久香蕉精品香蕉| 亚洲国产精品系列| 成人免费在线视频网站| 国产精品美女在线| www.亚洲天堂| 日韩欧美在线视频免费观看| 成人午夜小视频| 亚洲美女www午夜| 久久99久国产精品黄毛片入口| 俺也去精品视频在线观看| 成人黄色短视频在线观看| 欧美午夜女人视频在线| 色阁综合伊人av| 97国产一区二区精品久久呦| 久久精品在线视频| 久久免费视频这里只有精品| 久久久999精品| 中文字幕视频一区二区在线有码| 91九色视频导航| 中文字幕亚洲欧美在线| 欧美激情一区二区三区在线视频观看| 日韩在线观看免费高清完整版| 成人欧美一区二区三区黑人| 国产精品专区第二| 欧美日韩亚洲系列| 影音先锋欧美精品| 国产精品视频色| 国产精品jvid在线观看蜜臀| 国产中文欧美精品| 久久91亚洲精品中文字幕奶水| 国产亚洲精品日韩| 欧美影院久久久| 欧美性在线观看| 丝袜亚洲欧美日韩综合| 69av视频在线播放| 久久久999国产| 伊人精品在线观看| 韩剧1988免费观看全集| 亚洲三级黄色在线观看| 91精品国产自产在线| 欧美激情奇米色| 久热国产精品视频| 亚洲视频在线观看免费| 精品无码久久久久久国产| 欧美做受高潮1| 九九九久久久久久| 久久精品视频一| 97在线视频免费播放| 亚洲精品视频久久| 色樱桃影院亚洲精品影院| 久久久久久有精品国产| 夜夜嗨av色综合久久久综合网| 91天堂在线视频| 日韩视频免费看| 欧美性20hd另类| xxx成人少妇69| 青青在线视频一区二区三区| 3344国产精品免费看| 日韩久久免费视频| 日韩精品视频中文在线观看| 中文日韩在线观看| 国产精品免费观看在线| 一区二区三区精品99久久| 成人啪啪免费看| 国产精品一区二区久久久久| 九九热这里只有精品6| 亚洲视频axxx| 久久夜色精品亚洲噜噜国产mv| 国产精品视频久久| 欧美做受高潮电影o| 亚洲最大成人在线| 亚洲小视频在线| 69视频在线免费观看| 国产一区二区日韩精品欧美精品|