判断文件夹路径是否合法, 判断文件路径是否合法

那天做项目,遇到一个问题,判断一个用户输入的字符串是否一个合法的文件路径。

 

由于用户输入的文件路径不一定在本机上存在,所以有些办法没法用。找到一个貌似好用的系统API

PathIsDirectory 也不管事儿,原因是它也只能判断存在的文件夹。我的需求是判断用户输入的路径是否合法。

 

比如 :D:/hero是合法的文件路径 d:/hero.exe也是 即使hero 或hero.exe不存在磁盘上

 

最后写了两个函数,分别判断文件路径和文件夹路径是否合法 MFC版的

 

    BOOL IsValidFilePath( LPCTSTR lpszFilePath )
    {
        CString sPath = lpszFilePath;
        // 把所有的正斜杠换成反斜杠( / -> / )
        sPath.Replace( _T("/"), _T("//") );
        sPath.MakeUpper();

        sPath.Replace( _T("FILE://////"), _T("") );

        int length = sPath.GetLength();
        if ( length <= 2 )
        {
            return FALSE;
        }

        if( sPath.GetAt( 1 ) != ':' )
        {
            return FALSE;
        }

        // 如果存在两个反斜杠则认为不合法(也可能不应该有这句)
        if ( sPath.Find( _T("////") ) != -1 )
        {
            return FALSE;
        }
        if ( sPath.Right(1) == _T("//") )
        {
            return FALSE;
        }

        TCHAR partition = sPath.GetAt( 0 );
        int aa = _T('A');
        if ( partition < _T('A')  || partition >_T('Z') )
        {
            return FALSE;
        }

        sPath = sPath.Right( length - 3 );
        TCHAR seps[] = { _T("//") };
        TCHAR *strToken = NULL;
        TCHAR *strNext = NULL;
        strToken = _tcstok_s( sPath.GetBuffer( 0 ), seps, &strNext );

        while( strToken != NULL )
        {
            if ( !IsValidFileName( strToken ) )
            {
                return FALSE;
            }

            strToken = _tcstok_s( strNext, seps, &strNext );
        }


        return TRUE;
    }
    BOOL IsValidDirectory( LPCTSTR lpszDirectoryPath )
    {
        CString sDir = lpszDirectoryPath;
        sDir.Replace( _T("/"), _T("//") );
        int len = sDir.GetLength();

        sDir.TrimRight( _T("//") );
        if ( len - sDir.GetLength() >= 2 )
        {
            return FALSE;
        }

        return IsValidFileName( sDir );
    }

你可能感兴趣的:(判断文件夹路径是否合法, 判断文件路径是否合法)