怎樣判斷一個文件存在(vc)

最近的項目是對文件操作的,所以,多少都遇到一些關於文件操作的問題.用到最多的還是文件打開,文件讀寫,判斷文件存在否.本文不討論文件讀寫,只針對判斷文件存在否.

記得在C#裏,有一個東西,叫做CFile.通過它的方法CFile.Exit(Filename)就可以直接判斷文件是否存在,可是在VC裏沒有這個方法.

最開始時,我是通過定義一個文件變量,然後打開一個那個要判斷的文件,如果返回0,就表示這個文件不存在.這種方法需要兩步,第一步,先定義一個文件類的變量,第二步,用這個變量直接打開一個文件,查看其返回值,如果爲0,就表示不存在.這種方法也還是比較簡單的,不過這樣會浪費一些資源,而且,如果這個文件存在,那還要在判斷完後關閉文件,如果不關閉,可能就會出問題.在VC裏,有好幾個文件類,看你喜歡哪種就用哪種了.我使用的方法代碼如下:

   CStdioFile fileTemp2;
   if ((fileTemp2.Open(FileName,CFile::modeRead)==0))
   {   //如果這個文件不存在時  
     MessageBox(_T("你選擇的文件不存在,請重新選擇!"));
    }

後來又發現了另一個方法GetFileAttributes,可以直接判斷文件是否存在,而不用定義變量等,方法如下
if(GetFileAttributes("C://Test.bmp") == -1)
{
    MessageBox(NULL,_T("文件不存在!"),_T("系統錯誤"),MB_ICONERROR);
}

這個方法很好用,建議使用.

當然還在其它的方法,我也沒試用,因爲,好東西有一個就可以了,不過,如果以上的方法不能滿足你的要求時,還是可以試下以下的方法(我沒有測試,網上找):

<1>:  CFileFind find;BOOL IsFinded = find.FindFile("C://Test.bmp");
if(IsFinded){//存在}
else{//不存在}

用CFileFind類的FindFile()和FindNextFile函數進行查找,如果搜索完
C:/還未找到,就是文件不存在.函數具體用法請參考msdn
<2>:  1、BOOL PathFileExists(LPCTSTR lpszPath); SHELL API
2、DWORD GetFileAttributes(LPCTSTR lpFileName);   API
<3>: 1.CFileFind f;  
(這個就是上面第一種方法)
if (f.FindFile(g_szCalFileName,0))
{ // 做你的處理}
else{    
MessageBox("File Not Exsit!","提示",MB_OK+MB_ICONINFORMATION);    
return;}

2.如果要打開文件,可以順便:
CFile file;
if(!file.Open(filepath,CFile::modeRead))
MessageBox("error");
else{
file.Close();
return;}

還有一種最簡單的方法直接調用PathFileExists函數來判斷文件是否存在
PathFileExists("filepath");
如果文件存在則返回真,不存在則返回假,該方法最爲直接與簡單,推薦使用

發佈了22 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章