亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

CFile與CStdioFile的文件讀寫(xiě)使用方法詳解

 更新時(shí)間:2013年09月16日 09:46:30   作者:  
以下是對(duì)CFile與CStdioFile的文件讀寫(xiě)使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下

CFile
//創(chuàng)建/打開(kāi)文件
CFile file;
file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);

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

CFile::modeNoTruncate:以追加方式打開(kāi),如果文件存在,打開(kāi)并且不將文件長(zhǎng)度置零,如果文件不存在,會(huì)拋出異常。一般與CFile::modeCreate一起使用,則文件不存在時(shí),新建一個(gè)文件;存在就進(jìn)行追加操作。
CFile::modeReadWrite:以讀寫(xiě)方式打開(kāi)文件。
CFile::modeRead:只讀。
CFile::modeWrite:只寫(xiě)。

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

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

//關(guān)閉文件
file.Close();

CStdioFile
CStdioFile是CFile的派生類(lèi),對(duì)文件進(jìn)行流式操作,對(duì)于文本文件的讀寫(xiě)很有用處,可按行讀取寫(xiě)入。

//寫(xiě)入數(shù)據(jù)
CString strValue = "Hello World!";
file.WriteString(strValue);

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

當(dāng)文件存在多行數(shù)據(jù)需要逐行讀取時(shí),可用函數(shù)BOOL CStdioFile::ReadString(CString& rString),當(dāng)遇到"/n "時(shí)讀取截?cái)?,如果文件未讀完,返回true,否則返回false。

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

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

1.文件的查找
當(dāng)對(duì)一個(gè)文件操作時(shí),如果不知道該文件是否存在,就要首先進(jìn)行查找。MFC中有一個(gè)專(zhuān)門(mén)用來(lái)進(jìn)行文件查找的類(lèi)CFileFind,使用它可以方便快捷地進(jìn)行文件的查找。下面這段代碼演示了這個(gè)類(lèi)的最基本使用方法。

復(fù)制代碼 代碼如下:

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

2.文件的打開(kāi)/保存對(duì)話(huà)框
讓用戶(hù)選擇文件進(jìn)行打開(kāi)和存儲(chǔ)操作時(shí),就要用到文件打開(kāi)/保存對(duì)話(huà)框。MFC的類(lèi)CFileDialog用于實(shí)現(xiàn)這種功能。使用CFileDialog聲明一個(gè)對(duì)象時(shí),第一個(gè)BOOL型參數(shù)用于指定文件的打開(kāi)或保存,當(dāng)為T(mén)RUE時(shí)將構(gòu)造一個(gè)文件打開(kāi)對(duì)話(huà)框,為FALSE時(shí)構(gòu)造一個(gè)文件保存對(duì)話(huà)框。

在構(gòu)造CFileDialog對(duì)象時(shí),如果在參數(shù)中指定了OFN_ALLOWMULTISELECT風(fēng)格,則在此對(duì)話(huà)框中可以進(jìn)行多選操作。此時(shí)要重點(diǎn)注意為此CFileDialog對(duì)象的m_ofn.lpstrFile分配一塊內(nèi)存,用于存儲(chǔ)多選操作所返回的所有文件路徑名,如果不進(jìn)行分配或分配的內(nèi)存過(guò)小就會(huì)導(dǎo)致操作失敗。下面這段程序演示了文件打開(kāi)對(duì)話(huà)框的使用方法。
復(fù)制代碼 代碼如下:

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.文件的讀寫(xiě)
文件的讀寫(xiě)非常重要,下面將重點(diǎn)進(jìn)行介紹。文件讀寫(xiě)的最普通的方法是直接使用CFile進(jìn)行,如文件的讀寫(xiě)可以使用下面的方法:

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

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

雖然這種方法最為基本,但是它的使用繁瑣,而且功能非常簡(jiǎn)單。我向你推薦的是使用CArchive,它的使用方法簡(jiǎn)單且功能十分強(qiáng)大。首先還是用CFile聲明一個(gè)對(duì)象,然后用這個(gè)對(duì)象的指針做參數(shù)聲明一個(gè)CArchive對(duì)象,你就可以非常方便地存儲(chǔ)各種復(fù)雜的數(shù)據(jù)類(lèi)型了。它的使用方法見(jiàn)下例。

//對(duì)文件進(jìn)行寫(xiě)操作
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();

//對(duì)文件進(jìn)行讀操作
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的 << 和>> 操作符用于簡(jiǎn)單數(shù)據(jù)類(lèi)型的讀寫(xiě),對(duì)于CObject派生類(lèi)的對(duì)象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()還可以進(jìn)行類(lèi)的讀寫(xiě),如:

//存儲(chǔ)CAboutDlg類(lèi)
ar.WriteClass(RUNTIME_CLASS(CAboutDlg));

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

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

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

復(fù)制代碼 代碼如下:

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.臨時(shí)文件的使用
正規(guī)軟件經(jīng)常用到臨時(shí)文件,你經(jīng)??梢詴?huì)看到C:/Windows/Temp目錄下有大量的擴(kuò)展名為tmp的文件,這些就是程序運(yùn)行是建立的臨時(shí)文件。臨時(shí)文件的使用方法基本與常規(guī)文件一樣,只是文件名應(yīng)該調(diào)用函數(shù)GetTempFileName()獲得。它的第一個(gè)參數(shù)是建立此臨時(shí)文件的路徑,第二個(gè)參數(shù)是建立臨時(shí)文件名的前綴,第四個(gè)參數(shù)用于得到建立的臨時(shí)文件名。得到此臨時(shí)文件名以后,你就可以用它來(lái)建立并操作文件了,如:
復(fù)制代碼 代碼如下:

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.文件的復(fù)制、刪除等
MFC中沒(méi)有提供直接進(jìn)行這些操作的功能,因而要使用SDK。SDK中的文件相關(guān)函數(shù)常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它們的用法很簡(jiǎn)單,可參考MSDN。

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

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

[1]顯示對(duì)話(huà)框,取得文件名

復(fù)制代碼 代碼如下:

CString FilePathName;
CFileDialog dlg(TRUE);///TRUE為OPEN對(duì)話(huà)框,F(xiàn)ALSE為S***E AS對(duì)話(huà)框
if (dlg.DoModal() == IDOK)
    FilePathName=dlg.GetPathName();

相關(guān)信息:CFileDialog 用于取文件名的幾個(gè)成員函數(shù):
假如選擇的文件是C:/WINDOWS/TEST.EXE

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

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

復(fù)制代碼 代碼如下:

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

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

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

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

相關(guān)文章

  • 一篇文章帶你了解C語(yǔ)言的文件操作

    一篇文章帶你了解C語(yǔ)言的文件操作

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C/C++實(shí)現(xiàn)磁盤(pán)相關(guān)操作的示例代碼

    C/C++實(shí)現(xiàn)磁盤(pán)相關(guān)操作的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C/C++如何實(shí)現(xiàn)磁盤(pán)相關(guān)操作,例如遍歷磁盤(pán)容量、實(shí)現(xiàn)磁盤(pán)格式化、移除指定磁盤(pán)等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼

    基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言數(shù)組實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 深入理解C語(yǔ)言中編譯相關(guān)的常見(jiàn)錯(cuò)誤

    深入理解C語(yǔ)言中編譯相關(guān)的常見(jiàn)錯(cuò)誤

    本篇文章是對(duì)C語(yǔ)言中編譯相關(guān)的常見(jiàn)錯(cuò)誤進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中const的常見(jiàn)用法詳解

    C++中const的常見(jiàn)用法詳解

    const名叫常量限定符,用來(lái)限定特定變量,以通知編譯器該變量是不可修改的,本文為大家整理了const的幾種使用,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯)

    C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)基于控制臺(tái)的電子時(shí)鐘

    C語(yǔ)言實(shí)現(xiàn)基于控制臺(tái)的電子時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)基于控制臺(tái)的電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序

    C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 用C++來(lái)解決3*3拼圖的問(wèn)題

    用C++來(lái)解決3*3拼圖的問(wèn)題

    這篇文章主要介紹了用C++來(lái)解決3*3拼圖的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù)

    C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論