• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            原文地址:http://blog.csdn.net/zhuang_rui/archive/2007/09/28/1804875.aspx
            各種關于文件的操作在程序設計中是十分常見,如果能對其各種操作都了如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的代碼,因而熟練的掌握文件操作是十分重要的。本文將對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();


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhuang_rui/archive/2007/09/28/1804875.aspx

            posted on 2010-03-22 11:09 漂漂 閱讀(392) 評論(0)  編輯 收藏 引用 所屬分類: 深入vc++
            久久精品国产亚洲AV影院| 亚洲伊人久久成综合人影院| 久久天堂AV综合合色蜜桃网| 久久久久久夜精品精品免费啦| 成人午夜精品无码区久久| 91久久精一区二区三区大全| 精品久久久无码中文字幕| 一本一本久久aa综合精品| 久久99久久99小草精品免视看| 亚洲国产成人精品91久久久| 欧美一区二区三区久久综| 久久99国产精品一区二区| 亚洲精品tv久久久久| 99精品国产在热久久无毒不卡| 久久99国产精品成人欧美| 人妻无码αv中文字幕久久| 999久久久免费国产精品播放| 久久久精品国产免大香伊| 国产精品综合久久第一页| 99久久久精品| 亚洲人成精品久久久久| 精品久久久久久久久久中文字幕 | 国内精品久久久久久久久| 99久久国产亚洲综合精品| 国产999精品久久久久久| 久久久久亚洲精品无码蜜桃| 久久久这里有精品| 久久久久亚洲AV综合波多野结衣| 996久久国产精品线观看| 奇米影视7777久久精品| 久久精品国产久精国产果冻传媒| 欧美性大战久久久久久| 久久成人永久免费播放| 久久香蕉国产线看观看99| 久久99精品国产一区二区三区| 精品熟女少妇a∨免费久久| 午夜精品久久久久久久| 亚洲成色www久久网站夜月| 无码人妻久久一区二区三区免费| 麻豆久久久9性大片| 久久精品国产亚洲AV久|