程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> CFile與CStdioFile的文件讀寫應用辦法詳解

CFile與CStdioFile的文件讀寫應用辦法詳解

編輯:關於C++

CFile與CStdioFile的文件讀寫應用辦法詳解。本站提示廣大學習愛好者:(CFile與CStdioFile的文件讀寫應用辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是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();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved