- ベストアンサー
ファイル名に『?』が入ってるファイルを開くには?
ファイル名に半角の『?』が入ってるファイルには アクセスできないでしょうか? opendir(DIR, "./dir"); @list = grep(!/^\./, readdir(DIR)); close(DIR); ディレクトリにあるファイルのリストを取得して、 そのリストに基づいて処理をしたいのですが… ファイル名に『?』が入ってるファイルは、 open(); rename(); ファイル演算子等の処理できません。 これをなんとかする方法はあるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1>perl でなんとかしようかと… おそらく、Win32APIを直接呼び出して「*」に該当する処理をすればできるんじゃないかと思いますが、 こちらでちょっと試せないのでなんとも言えませんデス。
その他の回答 (2)
- ___noboru___
- ベストアンサー率28% (33/117)
こちらの環境は Linux で、Perl 5.8.6 ですが、できましたよ。ためし作ったプログラムをコピーしておきます。 #!/usr/bin/perl -w use strict; opendir(DIR, "./dir"); my @list = grep(!/^\./, readdir(DIR)); close(DIR); for my $fn (@list) { my $f = "dir/$fn"; open(F, "< $f") or die "$f: $!\n"; my $c = 1; while (<F>) { print "$f:$c: $_"; $c++; } close(F); } これでこのプログラムを作ったディレクトリで mkdir dir とやって vi 'dir/a?b' などとやってファイルを作って実行したら内容が出ました。 ということで念のためOSやPerlのバージョンなどの環境を教えて下さい。それと上記のプログラムを実行して die の所でエラーを出して止まるようならそのエラーを書いて下さい。
補足
ありがとうございます。 Windows 環境 Perl Ver5.8.8 です。 試してみたところ『Invalid argument』と出ました。 Windows ではムリでしょうか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
例えば、windows では、ファイル名に半角の?を含めることができません。 なので、そのような場合、アプリケーションからそういうファイルシステムを利用している場合は、操作ができないということになろうかと思います。 良くある手段として、コマンドプロンプトから、* を指定したマッチングで、削除はできると思います、多分リネームもできるんじゃないかと思いますが、実際に試してみることができないんで、自信はありませんが。
補足
ありがとうございます。 Windows で ? の入ってしまってるファイルがあるので それを見つけ出して、削除なり、リネームなりしたくて… 結構な数あったのでそれを一つづつ手作業ではムリなので 唯一多少プログラミングできる perl でなんとかしようかと…
お礼
ありがとうございます。 Perl のみで何とかできればと思ったのですが… Win32API …そこまでの知識ありませんので諦めて 別の方法を探してみます。