MatchesMask で [ ] 文字を使うには?

解決


けど  2012-09-09 22:05:07  No: 42877  IP: 192.*.*.*

初歩的な質問ですみません
MatchesMask でファイル名の照合をしていますが先頭に[資料] とか入ってると「〜は正しくないマスク文字です.」とエラーになります

  if Masks.MatchesMask('[資料]a.txt','[資料]*') then
    Caption:='ok' else Caption:='no';

エスケープシーケンス?するにはどうしたらよいのでしょう?
``の様に[[ したり""でくくったりしましたがダメでした
とりあえず動かしたいのはDelphi5です

編集 削除
DEKO  2012-09-10 00:07:40  No: 42878  IP: 192.*.*.*

こんにちは。

[] は文字セット (スキャンセット) の為に利用されているので、
取得したファイル名の [] をファイル名に使えない文字...例えば <> とかに置換してみてはいかがでしょうか?

function EscapeScanset(s: string): string;
begin
  result := StringReplace(s     , '[', '<', [rfReplaceAll]);
  result := StringReplace(result, ']', '>', [rfReplaceAll]);
end;

if Masks.MatchesMask(EscapeScanset('[資料]a.txt'), EscapeScanset('[資料]*')) then
  Caption:='ok' else Caption:='no';

[Masks.MatchesMask]
http://docwiki.embarcadero.com/Libraries/ja/System.Masks.MatchesMask

編集 削除
けど  2012-09-10 01:04:48  No: 42879  IP: 192.*.*.*

なるほど、比較する時だけ置換すればいいのですね
頭が固くなっていたようです
ありがとうございました

編集 削除
けど  2012-09-10 01:05:35  No: 42880  IP: 192.*.*.*

すみませんチェック忘れです

編集 削除