ファイル名に<>:*?/等の文字が使われてないかのチェック

解決


初心者  2009-05-25 17:00:30  No: 34508

Windowsのファイル名に<>:*?/などの文字は使えませんが、エディットにファイル名を入力させるときにこれらの文字を使ってないか、チェックがしたいのです。

演算子inで判定できるのかと思っていたのですが、string1  in  string2では「型が対応していない」とエラーが出ます。
こういうときはどうするんでしょうか?


AntiVB  2009-05-25 18:06:52  No: 34509

for i := 1 to Length(Hoge) do
  if Hoge[i] in ['<', '>', ':', '*', '?', '/'] then
    ShowMessage('はい、あうとぉ!');


Manbon  2009-05-25 18:17:38  No: 34510

私ならPos関数。


QA  2009-05-25 19:19:51  No: 34511

> 演算子inで判定できるのかと思っていたのですが
  AntiVBさんの方法でいけると思いますが・・・
  私はDelphi5 なので以下のような関数で間に合わせています。必要に応じて ExtractFileName と抱き合わせて使います。
  ホントは文字コード 0 〜 31 番の文字の対策も必要なんだろうけど。
function CheckFileName(const S: String): Boolean;
var
  i,L: Integer;
begin
  Result := False;
  L := Length(S);  i := 1;
  if (S = '') or (L > 255) then Exit;
  while i <= L do
  begin
    if S[i] in [#$81..#$9F, #$E0..#$FC]  then Inc(i)
    else
      if S[i] in ['\', '/', ':', '*', '?', '"', '<', '>', '|'] then Exit;
    Inc(i);
  end;
  Result := True;
end;


初心者  2009-05-25 19:53:10  No: 34512

ありがとうございます。QAさんの関数を利用させていただこうと思います。
ループで一文字ずつ点検するAntiVBさんのレスも大変参考になりました。

ありがとうございます。


monaa  2009-05-25 21:30:15  No: 34513

ファイル名を扱うなら予約語ってのもありますよ。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D
あとNTFSだとコロンはストリーム分離記号だったり。
結構大変です。


正規表現  2009-05-26 09:15:27  No: 34514

正規表現ライブラリ使ってやればおk?


DEKO  2009-05-26 16:42:29  No: 34515

Delphi 2009 とそれ以前で同じロジックを用いたいのなら、
PathGetCharType() を使うというテもあります。

[PathGetCharType]
http://msdn.microsoft.com/ja-jp/library/bb773608(en-us,VS.85).aspx


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加