最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

//寫入數(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的派生類,對文件進(jìn)行流式操作,對于文本文件的讀寫很有用處,可按行讀取寫入。

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

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

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

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

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

在構(gòu)造CFileDialog對象時(shí),如果在參數(shù)中指定了OFN_ALLOWMULTISELECT風(fēng)格,則在此對話框中可以進(jìn)行多選操作。此時(shí)要重點(diǎn)注意為此CFileDialog對象的m_ofn.lpstrFile分配一塊內(nèi)存,用于存儲(chǔ)多選操作所返回的所有文件路徑名,如果不進(jìn)行分配或分配的內(nèi)存過小就會(huì)導(dǎo)致操作失敗。下面這段程序演示了文件打開對話框的使用方法。
復(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.文件的讀寫
文件的讀寫非常重要,下面將重點(diǎn)進(jìn)行介紹。文件讀寫的最普通的方法是直接使用CFile進(jìn)行,如文件的讀寫可以使用下面的方法:

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

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

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

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

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

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

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

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

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

復(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í)文件名以后,你就可以用它來建立并操作文件了,如:
復(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中沒有提供直接進(jìn)行這些操作的功能,因而要使用SDK。SDK中的文件相關(guān)函數(shù)常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它們的用法很簡單,可參考MSDN。

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

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

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

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

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

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

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

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

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

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

[3]移動(dòng)文件指針
file.Seek(100,CFile::begin);///從文件頭開始往下移動(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]讀寫文件
讀文件:
char buffer[1000];
file.Read(buffer,1000);
寫文件:
CString string("自強(qiáng)不息");
file.Write(string,8);

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

相關(guān)文章

  • C++實(shí)現(xiàn)四則運(yùn)算器(無括號)

    C++實(shí)現(xiàn)四則運(yùn)算器(無括號)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則運(yùn)算器,無括號的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C語言模擬擲骰子游戲

    C語言模擬擲骰子游戲

    這篇文章介紹了C語言模擬擲骰子游戲的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。需要的朋友可以收藏下
    2021-11-11
  • C++利用SQLite實(shí)現(xiàn)命令行工具

    C++利用SQLite實(shí)現(xiàn)命令行工具

    這篇文章主要為大家詳細(xì)介紹了一個(gè)基于 C++、SQLite 和 Boost 庫的簡單交互式數(shù)據(jù)庫操作 Shell,該 Shell 允許用戶通過命令行輸入執(zhí)行各種數(shù)據(jù)庫操作,感興趣的可以了解下
    2023-11-11
  • QT實(shí)戰(zhàn)之打開最近圖片功能的實(shí)現(xiàn)

    QT實(shí)戰(zhàn)之打開最近圖片功能的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt和QSettings實(shí)現(xiàn)打開最近圖片功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)QT有一定的幫助,感興趣的可以了解一下
    2022-06-06
  • C++ 11實(shí)現(xiàn)檢查是否存在特定的成員函數(shù)

    C++ 11實(shí)現(xiàn)檢查是否存在特定的成員函數(shù)

    C++11/14相比以往的C++98/03在很多方面做了簡化和增強(qiáng),尤其是在泛型編程方面,讓C++的泛型編程的威力變得更加強(qiáng)大,下面這篇文章主要介紹了利用C++ 11實(shí)現(xiàn)檢查是否存在特定成員函數(shù)的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • C/C++實(shí)現(xiàn)對STORM運(yùn)行信息查看及控制的方法

    C/C++實(shí)現(xiàn)對STORM運(yùn)行信息查看及控制的方法

    這篇文章主要介紹了C/C++實(shí)現(xiàn)對STORM運(yùn)行信息查看及控制的方法,需要的朋友可以參考下
    2014-07-07
  • C++中的常量定義小結(jié)

    C++中的常量定義小結(jié)

    在C++中,并不提倡使用#define定義一個(gè)常量。#define本質(zhì)上是一個(gè)預(yù)處理器指令,它僅僅表示使用一個(gè)串代替別一個(gè)串而已。也就是說,#define定義的常量從未被編譯器看到——它們在編譯器開始處理源碼之前就被移走了
    2015-08-08
  • C語言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合詳解

    C語言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合詳解

    這篇文章主要給大家介紹了關(guān)于C語言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 淺析ORB、SURF、SIFT特征點(diǎn)提取方法以及ICP匹配方法

    淺析ORB、SURF、SIFT特征點(diǎn)提取方法以及ICP匹配方法

    這篇文章主要為大家介紹了常用的特征點(diǎn)提取方法(ORB、SURF、SIFT)和ICP匹配方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • C語言實(shí)現(xiàn)定時(shí)器控制LED燈閃爍

    C語言實(shí)現(xiàn)定時(shí)器控制LED燈閃爍

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)定時(shí)器控制LED燈閃爍,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論

广河县| 敦煌市| 滨州市| 黑龙江省| 开阳县| 黔东| 永善县| 磐石市| 海口市| 钟山县| 襄汾县| 长寿区| 探索| 日照市| 荔波县| 合水县| 贵定县| 桂东县| 达州市| 巴马| 南开区| 贵南县| 二手房| 泸州市| 涟水县| 新兴县| 高碑店市| 嵩明县| 绵竹市| 定襄县| 焦作市| 枞阳县| 抚松县| 巫山县| 怀来县| 邵东县| 横峰县| 永年县| 阜新市| 胶州市| 察隅县|