读书人

怎么判断文件夹路径合法性

发布时间: 2013-07-09 09:50:48 作者: rapoo

如何判断文件夹路径合法性
不是要判断文件夹是否存在,网上大多是PathFileExists或access的一种办法。

我是想判断,给出一个字符串,是否是合法的文件路径。

比如
C:\abc\ddd
这就是合法的
Z:\/?*\ddd
这就是不合法的


通过GetLastError取得最后一个错误,判断目录是否合法,然后CloseHandle关闭CreateFile的返回值

有关GetLastError的详细信息请参见MSDN。。(据统计,微软MSDN里边这句话出现次数最多)
[解决办法]



#include "vector"
#include "string"
using namespace std;

void __inline vSplitString( string strSrc ,vector<string>& vecDest ,char cSeparator )
{
if( strSrc.empty() )
return ;

string::size_type size_pos = 0;
string::size_type size_prev_pos = 0;

while( (size_pos = strSrc.find_first_of( cSeparator ,size_pos)) != string::npos)
{
string strTemp= strSrc.substr(size_prev_pos , size_pos-size_prev_pos );

vecDest.push_back(strTemp);
//cout << "string = "<< strTemp << endl;
size_prev_pos =++ size_pos;
}

vecDest.push_back(&strSrc[size_prev_pos]);
//cout << "end string = "<< &strSrc[size_prev_pos] << endl;
};

void main()
{
string strVal;
//strVal="C:\\abc\\ddd";
//strVal="C:\\abc\\ddd中问\\csdn\\文件夹";
strVal="Z:\/?*\ddd";
vector<string> SplitVec;
vSplitString( strVal, SplitVec, '\\') ;

if (SplitVec.size()>0)
{
if(SplitVec[0].size()!=2)
goto loop;

const char *pan = SplitVec[0].c_str();
{
if ( (*pan>='a'&&*pan<='z')
[解决办法]
(*pan>='A'&&*pan<='Z'))
{
cout<<"盘符:"<<*pan<<",正常"<<endl;
}
else
{
goto loop;
}
}
int npos;
for (int i=1;i<SplitVec.size();i++)
{
npos = SplitVec[i].find('\\');
if (npos>0)
{
goto loop;
}

npos = SplitVec[i].find('/');
if (npos>0)
{
goto loop;
}

npos = SplitVec[i].find(':');
if (npos>0)
{
goto loop;
}

npos = SplitVec[i].find('*');
if (npos>0)
{
goto loop;
}
npos = SplitVec[i].find('?');
if (npos>0)
{
goto loop;
}

npos = SplitVec[i].find('"');
if (npos>0)
{
goto loop;
}
npos = SplitVec[i].find('<');
if (npos>0)
{
goto loop;
}
npos = SplitVec[i].find('>');
if (npos>0)
{
goto loop;


}
npos = SplitVec[i].find('
[解决办法]
');
if (npos>0)
{
goto loop;
}
}
cout<<strVal<<" 是正确的路径"<<endl;
}
else
{
goto loop;
}



return;

loop:
cout<<strVal<<" 是错误的路径"<<endl;



}

读书人网 >C++

热点推荐