みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイル名に『?』が入ってるファイルを開くには?

ファイル名に半角の『?』が入ってるファイルには
アクセスできないでしょうか?

opendir(DIR, "./dir");
@list = grep(!/^\./, readdir(DIR));
close(DIR);

ディレクトリにあるファイルのリストを取得して、
そのリストに基づいて処理をしたいのですが…
ファイル名に『?』が入ってるファイルは、
open(); rename(); ファイル演算子等の処理できません。
これをなんとかする方法はあるのでしょうか?

投稿日時 - 2006-05-08 18:09:59

QNo.2138864

困ってます

質問者が選んだベストアンサー

#1>perl でなんとかしようかと…
おそらく、Win32APIを直接呼び出して「*」に該当する処理をすればできるんじゃないかと思いますが、
こちらでちょっと試せないのでなんとも言えませんデス。

投稿日時 - 2006-05-08 20:33:04

お礼

ありがとうございます。

Perl のみで何とかできればと思ったのですが…
Win32API …そこまでの知識ありませんので諦めて
別の方法を探してみます。

投稿日時 - 2006-05-09 18:23:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

こちらの環境は 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 の所でエラーを出して止まるようならそのエラーを書いて下さい。

投稿日時 - 2006-05-08 18:47:48

補足

ありがとうございます。

Windows 環境 Perl Ver5.8.8 です。
試してみたところ『Invalid argument』と出ました。
Windows ではムリでしょうか?

投稿日時 - 2006-05-08 19:06:11

ANo.1

例えば、windows では、ファイル名に半角の?を含めることができません。
なので、そのような場合、アプリケーションからそういうファイルシステムを利用している場合は、操作ができないということになろうかと思います。
良くある手段として、コマンドプロンプトから、* を指定したマッチングで、削除はできると思います、多分リネームもできるんじゃないかと思いますが、実際に試してみることができないんで、自信はありませんが。

投稿日時 - 2006-05-08 18:30:15

補足

ありがとうございます。

Windows で ? の入ってしまってるファイルがあるので
それを見つけ出して、削除なり、リネームなりしたくて…
結構な数あったのでそれを一つづつ手作業ではムリなので
唯一多少プログラミングできる perl でなんとかしようかと…

投稿日時 - 2006-05-08 18:59:23

あなたにオススメの質問