随笔 - 132  文章 - 51  trackbacks - 0
<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

文章档案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新评论

阅读排行榜

评论排行榜

C/C++判断一个文件是否存在
1.
bool isExistFile(const char *pszFileName){
    FILE 
*fp = fopen(pszFileName, "rb");
    
if(fp == NULL)
        
return false;
    fclose(fp);
    
return true;
}

bool isExistFile(const char *pszFileName){
        fstream file;
        file.open(pszFileName,ios::
in);
        
if(!file)
            
return false;

        
return true;
    }

2.利用 c 语言的库的办法:

函数名: access

// crt_access.c
#include  <io.h>
#include  
<stdio.h>
#include  
<stdlib.h>

int main( void )
{
   
/* Check for existence */
   
if( (_access( "crt_ACCESS.C"0 )) != -1 )
   
{
      printf( 
"File crt_ACCESS.C exists\n" );
      
/* Check for write permission */
      
/* assume file is read-only */
      
if( (_access( "crt_ACCESS.C"2 )) == -1 )
         printf( 
"File crt_ACCESS.C does not have write permission\n" );
   }

}

3.用FindFirstFile


#include <windows.h>
#include 
<string> 
#include 
<vector>
using namespace std; 

// 核查目录,若目录不存在,创建目录
bool FindOrCreateDirectory( const char* pszPath )
{
    WIN32_FIND_DATA fd;
    HANDLE hFind 
= ::FindFirstFile( pszPath, &fd );
    
while( hFind != INVALID_HANDLE_VALUE )
    
{
        
if ( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
            
return true;
    }


    
if ( !::CreateDirectory( pszPath, NULL ) )
    
{
        
char szDir[MAX_PATH];
        sprintf_s( szDir, 
sizeof(szDir), "创建目录[%s]失败,请检查权限", pszPath );
        ::MessageBox( NULL, szDir, 
"创建目录失败", MB_OK|MB_ICONERROR );
        
return false;
    }


    
return true;
}


// 遍历目录
bool CheckDirectory( char* pszPath )
{
    vector
< std::string > vtPath;

    
const char* sep = "\\/";
    
char* next_token;
    
char* token =  strtok_s( pszPath, sep, &next_token);
    
while( token != NULL )
    
{
        vtPath.push_back( token );
        token 
= strtok_s(NULL, sep, &next_token);
    }


    
if ( vtPath.size() > 0 )
    
{
        
if ( vtPath[0== "." )
            vtPath.erase( vtPath.begin() );
    }


    
// 核查所有路径是否存在
    std::string strCurPath;
    
for( size_t i = 0; i  < (int)vtPath.size(); ++i )
    
{
        strCurPath 
+= vtPath[i];
        strCurPath 
+= '\\';

        
if ( !FindOrCreateDirectory( strCurPath.c_str() ) )
        
{
            
return false;
        }

    }


    
return true;
}



int main() 

    
char szPath[MAX_PATH] = "./main\\test\\hello/jump\\test\\";
    CheckDirectory( szPath );
    

    system(
"pause");
    
return 0
}
 
posted on 2012-03-24 15:12 风轻云淡 阅读(11004) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理