動作環境
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
フォルダ名に不正な文字列が入っているかのチェックをしたい。
関連 http://qiita.com/7of9/items/9aa82ce970c2898da5d0
Qiitaへのコメントにてセパレータ文字列を1つのstring型で定義している例を参考にした。
Unit1.cpp
static bool DirName_hasInvalidChar(String target, String invalids)
{
String invld;
for(int idx = 0; idx <= invalids.Length(); idx++) {
invld = invalids.SubString(idx + 1, 1);
if (target.Pos(invld) > 0) {
return true;
}
}
return false;
}
static void Test_DirName_hasInvalidChar()
{
String invalids = ".\\/:*?\"<>|";
bool ok1 = DirName_hasInvalidChar(L"XXX", invalids);
bool ok2 = DirName_hasInvalidChar(L"314159265358979", invalids);
bool ng1 = DirName_hasInvalidChar(L"...", invalids);
bool ng2 = DirName_hasInvalidChar(L"A.B.C", invalids);
bool ng3 = DirName_hasInvalidChar(L"A\\B", invalids);
bool ng4 = DirName_hasInvalidChar(L"A/B", invalids);
bool ng5 = DirName_hasInvalidChar(L"A:B", invalids);
bool ng6 = DirName_hasInvalidChar(L"A*B", invalids);
bool ng7 = DirName_hasInvalidChar(L"A?B", invalids);
bool ng8 = DirName_hasInvalidChar(L"A\"B", invalids);
bool ng9 = DirName_hasInvalidChar(L"A<B", invalids);
bool ng10 = DirName_hasInvalidChar(L"A>B", invalids);
bool ng11 = DirName_hasInvalidChar(L"A|B", invalids);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Test_DirName_hasInvalidChar();
}
関数名は今後リファクタを検討するが、とりあえず実装した。