Windowsのファイル名に<>:*?/などの文字は使えませんが、エディットにファイル名を入力させるときにこれらの文字を使ってないか、チェックがしたいのです。
演算子inで判定できるのかと思っていたのですが、string1 in string2では「型が対応していない」とエラーが出ます。
こういうときはどうするんでしょうか?
for i := 1 to Length(Hoge) do
if Hoge[i] in ['<', '>', ':', '*', '?', '/'] then
ShowMessage('はい、あうとぉ!');
私ならPos関数。
> 演算子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;
ありがとうございます。QAさんの関数を利用させていただこうと思います。
ループで一文字ずつ点検するAntiVBさんのレスも大変参考になりました。
ありがとうございます。
ファイル名を扱うなら予約語ってのもありますよ。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D
あとNTFSだとコロンはストリーム分離記号だったり。
結構大変です。
正規表現ライブラリ使ってやればおk?
Delphi 2009 とそれ以前で同じロジックを用いたいのなら、
PathGetCharType() を使うというテもあります。
[PathGetCharType]
http://msdn.microsoft.com/ja-jp/library/bb773608(en-us,VS.85).aspx
ツイート | ![]() |