• 締切済み

globがスペースを含むフォルダの中を

Win2k + JPerlです。 スペースを含むフォルダの中身を、globが列挙できません。 なんででしょう。 ちなみにWindowsなので、Shift_JISじゃないと、ファイルリストが列挙できません。

  • Perl
  • 回答数2
  • ありがとう数3

みんなの回答

noname#205142
noname#205142
回答No.2

@list = <Program\\ Files\\*>; です。 バックスラッシュ一つだけだとエスケープだと思われちゃうので2個続けて書きます。Windowsのパスを指定する時はglobに限らず結構同じことが起きるので同じ対応が必要になります。 ちなみこの辺の話はperlwin32.podに明記されます。 あとWindowsのロングネームとショートネームの変換はActivePerlの場合、Win32モジュールのWin32::GetShortPathName()とWin32::GetLongPathName()を使います。

haporun
質問者

お礼

>バックスラッシュ一つだけだと Program\\ Files\\って文字列として 'Program\ Files\' ですよね。 これをglobに渡すんですか? 彼は更にエスケープを認識するコマンドに文字列を渡してるんですか? opendirはこの限りじゃないみたいですね。 >Win32:: そっかー、APIって実装されてるんですね。 これって use Win32 ってするんでしたっけ? クラスは扱ったことないからなぁ(しらべしらべ・・・、不安。

  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

きちんと調べたわけではありませんが、原因については推測できます。 PerlはUNIXの世界から生まれた言語です。 UNIXでは、空白を含むファイルやディレクトリは原則的に許されませんので、Perlの仕様もそれを前提としています。文字コード云々の問題ではないので、JPerlであっても同じです。Windowsに移植される際にも、オリジナルのPerlから拡張された機能・OSの仕様上実現できない機能(fork等)の削除はありますが、同じ名前の機能が仕様変更される事は基本的には無いはずです。これは、ソースレベルの互換性を最大限にする為、必要不可欠の事だと思います。 フォルダ名を指定する際に、8+3の昔の形式(つまりショートファイルネーム)で指定する事で恐らくは回避できるのではありませんか? Program Filesがprogra~1等となっているあれです。 他に、もっとうまいやり方を知っている人がいたら、フォローお願いします。

haporun
質問者

お礼

>原因については推測できます それは、私も考えましたが・・・。 でもunixでもスペースの前に\を入れてやれば結構指定できるので、\いれましたがダメでした。 cd program\ files とか。 forkも最近はWINでエミュされてますし。 ショートネーム使うことは考えたんですが、長いファイル名を短いファイル名に変換する関数がないんですよね。 <*>は最初から短いファイル名で出てくるのですが、glob又はopendir+readdirだと長いファイルが出てくるんですよね。 どうも、順番があってないらしく、させられないし。 どうしようかなぁ。

関連するQ&A

  • フォルダの中身を列挙する方法

    こんにちわ。 VB6.0でプログラムを作る練習をしているのですが、行き詰ったので質問させてください。 やりたいことは・・・ 1.指定したフォルダの中身のファイル名をテキストファイルだけリストBOXに表示。 2.それらテキストファイルの中身を昇順で連結して、新しいファイルを作る。 1はフォルダ参照ダイアログで、フォルダ名を取得。までは出来ました。 続きのフォルダの中身の参照部分がDir関数とforを使うのかな?と思い、MSDNライブラリを見たのですが、いまいちフォルダの中身を列挙する方法が分からないので教えてください。 よろしくお願いします。

  • 半角スペースのあるフォルダが削除できない

    よろしくおねがいいたします。 「新規作成」でフォルダを作ったのですが、うっかりフォルダの最後の文字を半角スペースにしたら、フォルダが消えなくなってしまいました。 消そうとすると、「ファイルを削除できません。送り側のファイルまたはディスクから読み取れません」というエラーがでます。 どうにかして消す方法はないでしょうか? DOSで立ち上げて消そうとしましたが、ファイル名が日本語で、かつ長いので「フォルダが存在しません」のようなエラーがでてしまいます。 OSはWINDOWS2000です。

  • 入力フォームでの半角全角スペース、タブをそのまま反映したい。

    入力フォームに入力した半角スペース全角スペース 、タブをそのまま反映させて、 フォーム入力とほぼ同じ形で、Web上に表示させたい のですが。 単純に置き換えるだけですが、\r\nを<br>には 置き換えています。 スペースがよく分かりません。 また、タブは、入力フォームに入力できないのでしょ うか(フォームを移動してしまう)。 ちなみに、文字コードは、Shift_JISです。 単純に、Shift_JISだと、スペースはこうだから、 こういったタグに置き換える、といった感じが、 ありがたいです。

    • ベストアンサー
    • CGI
  • フォルダ名やファイル名のスペースについて!!

     フォルダ名やファイル名にはスペースを入れない方が良いらしいのですが、 皆さん、 本当に入れていませんか?? _や-を使っているのでしょうか?フォルダ名やファイル名が日本語の方も同じでしょうか??   お聞かせ頂けると幸いです。  ちなみに、 スペースも_も-も入れずに、 〇〇1や〇〇2や〇〇3とか、 直接お尻に番号を付ける場合はどのような場合でしょうか?? こちらの方も併せてお聞かせ頂けると助かります。

  • ファイル・フォルダの削除について

    WIN98を試用しています。 検索を使って、目的のファイルを消すことはわかるのですが、 フォルダのみを消して、そのフォルダの中身のファイルは消さずにひとつ上のディレクトリに残すというのは可能なのでしょうか。

  • 【フォルダ名の文字コードを変換したい】

    【フォルダ名の文字コードを変換したい】 Windows Vistaです。 Windowsではフォルダ名にShift-JISを使っていますが、とあるプログラムが日本語を読み込む際、文字コードがUTF-8でないと読み込めないようで、フォルダ名に日本語を含むフォルダを参照すると文字化けしてしまいます。 なのでフォルダ名をUTF-8に変換したいです。 検索するとLinux上でShift-JISのフォルダ名をUTF-8にしたり、Windows上でもファイルの内容をShift-JISからUTF-8に変換したりする方法は見つかるのですが、Windows上でフォルダ名をUTF-8に変換する方法が見つかりません。 UTF-8に変換するとエクスプローラ上では文字化けするので、需要がないのでしょうか。 コマンドプロンプトとか苦手なので、何かフリーソフトでもあればいいのですが…

  • フォルダの中身が見えません。

    環境:Win7 Home 64bit デスクトップ上のフォルダにファイルを保存しました。 フォルダのプロパティを見ると、サイズ171GB、ファイル数: 46等が表示されるのですが、 そのフォルダを開くと中身が見えません。 フォルダオプションでは、「隠しファイル、隠しフォルダー、および隠しドライブを表示する」 にチェックが入っています。 どうすれば中身が表示されるでしょうか? ちなみに他のフォルダではこの現象は発生しておりません。 特定のフォルダでのみ発生しております。 また、この「中身が見えないフォルダ」を開いた際、アドレスバー(というのかどうか分かり ませんが、このフォルダの名前が表示されるフォルダの上の部分)の左側から右側に 向かって徐々に緑色に染まっていきます。 最後まで行っても特にファイル名が表示されることはなくそのままです。 (カーソル(矢印)をこのフォルダーの中に持っていくと砂時計のマークが矢印の横に表示 されるので、何かやっているようではあります。) 当現象について、対応方法等についてご教示いただければ幸いです。 よろしくお願いいたします。

  • 共有フォルダが見えない、アクセスできない

    win xp homeとwin 2k pro のワークグループネットワークです。 xpから2kへのアクセスに異常はありません。 2kからxpの共有フォルダにアクセスできません。 1.お互いにpingはとおります。 2.2kのマイネットワークでxpのコンピュータは見えますが、xpの共有フォルダが見えません。このコンピュータ名をクリックすると、「\\コンピュータ名にアクセスできません。アクセスが拒否されました。」となります。また、これを右クリックし、プロパティをクリックすると、「このサーバーにアクセスするための適切なアクセス権がありません。詳しくはネットワーク管理者に相談してください。」となります。 3.2kのファイル名を指定して実行で、\\コンピュータ名\共有名で共有フォルダの中身が表示され、ここからファイルを開くことができます。 4.2kのコマンドプロンプトで、dir \\コンピュータ名\共有名でフォルダの中身が表示されます。 5.2kのマイネットワークのネットワークプレースの追加で、\\コンピュータ名\共有名を追加して、これをクリックするとExplorerではフォルダの中身が表示され、ここからファイルを開くことができますが、アプリケーションのファイルを開くではこのネットワークプレースは表示されますが、これをクリックすると「ネットワーク名'\\コンピュータ名\共有名'が見つかりませんでした。正しいネットワークパスを入力してください。また、ネットワークが使用可能かどうか確認してください。」とでて、ファイルを開けません。 6.xpの共有フォルダのアクセス権は共有・NTFS 共にeveryone フルコントロールです。 7.xp 2k両方に同一のユーザー名とパスワードを設定してあります(そのつもりです)。 どこが悪いのでしょうか。教えてください。

  • フォルダが同名のファイルに変わってしまった

    私のPCは頻繁に電源が落ちるのですが、電源を入れなおしHDD内のあるフォルダが32kbのフォルダと同名のファイルになってしまいました。ちなみにそのフォルダは DATArecoveryというソフトを使ったら中身が空になってしまったフォルダです。ちなみにフォルダの中身が消える前、およびフォルダがファイルに変わっても容量は変わってません。補足として何かの拍子に一つのフォルダの中身が復活してからの話です。

  • フォルダーの中のファイル名をデータとして取りたい

    フォルダーの中にあるファイル名リストを作成したく ファイル名をデータで取り込む方法をおしえてください 以前 会社でDOS画面を使って 先輩がしてくれたのですが 今は助けてくれる人が居なく DOS画面も殆ど初心者レベルの技術しかありません 環境は Win XPです 宜しくお願いします

専門家に質問してみよう