- ベストアンサー
エラーが起こる理由を教えていただきたいです
- 課題で出されたツールを自分で書いてみたんですが、エラーが起こる理由が分からないので教えて頂きたいです。
- 課題の内容は、コマンドプロンプトの引数でディレクトリ名を与えて、そのディレクトリにあるファイルやサブディレクトリにあるファイルから拡張子が「.c」「.cpp」のものを再帰的に全て探します。
- 探した拡張子のファイルの中身に「//」で始まる行(コメント行)があればすべて置換して消すようにする、といった感じの内容になっています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
rubyのバージョンが1.9のようですので、magic commentを入れておいてください。 それがないと思わぬエラーがでたりしますので、 http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html それとデバッガを使ってみてください。 ruby -rdebug xxxx xxxx のように-rdebugを入れれば使えるようになります。 またrubygemsからruby-debugをインスールする方法もあります。 `initialize': Permission denied - dir1 の周辺にどの行でエラーがあるのか情報があるはずです。dir1フォルダが書き込み(読み込み)禁止になっているような感じですが。 デバッガを使うのが解決の近道だと思います。
その他の回答 (3)
- ki073
- ベストアンサー率77% (491/634)
No.2です MacRuby 0.12 (ruby 1.9.2) ですが、 No.3にkmeeさんが書かれているのと同じ結果です。 Errno::EISDIR: Is a directory - read() failed となります。 dir1が読み込みが禁止されている場合にはopenで Errno::EACCES: Permission denied - open() failed となりますので、実際にはeachの前の17行めのopenでエラーになっているのではないかと思います。 質問者さんはWindowsのようですので、エラーメッセージが微妙に違う可能性はありますが 課題のようですので、ヒントだけ Dir.glob("#{dir}/*")でファイル名を取得しするのがよいように思います。current directoryよりの相対パスでファイル名が得られます。 他にも気がついた範囲で (動作確認はしていないので正しいかは分かりません) 24行目directory?(fullpath)はクラスメソッドに 37行目temp = Tempfile::new(file)は temp = Tempfile.new(file)に 40行目f.read.each{|line|は f.each{|line|に
お礼
返信おそくなってしまい申し訳ございません。 一応フォルダの書き込み禁止が原因だったみたいですが、こちらに書かれているようにスクリプトを修正してみました。 こちらでも問題なく動きましたし、記述的にもスッキリしますね。 再びご回答ありがとうございました。
- kmee
- ベストアンサー率55% (1857/3366)
組み込み関数open→戻り値のFileクラスのインスタンス って、ディレクトリ内のファイル検索に使えましたっけ? 手許のRuby1.8.7p370,Mac では、openはエラーにならないけど、eachでErrno::EISDIR: Is a directory となりました。
お礼
先生はこの方法でもできる的なことを言ってた気がしたんですが、できないんですかね? 一応修正して動くスクリプトは書けたのでこれで問題ないかなと思っています。 回答ありがとうございました。
- suzukikun
- ベストアンサー率28% (372/1325)
エラーメッセージ通りなら、このプログラムを実行するときに引数を渡してないのでdir変数に値が入っていないんだと思うのですが。
お礼
回答ありがとうございます。 一応引数として「ruby Sub.rb dir1」このようにディレクトリ名を与えたのですが、「`initialize': Permission denied - dir1」というエラーが出てしまいます。 これはコマンドの記述方法が正しくない、ということなんですかね?
お礼
回答ありがとうございます。 返信が遅くなってしまいすみません。 rubyを始めたばかりなのでデバッガあるとは知りませんでした。 試してみたところ、エラーの内容はよくわからなかったのですが、フォルダが書き込み禁止になっていただけというものすごく単純な事だったみたいです。 プログラムの間違ってる箇所ばかり探していたので、初歩的なことに気づけませんでした(-_-;) 無事動くようになったのでご回答本当に助かりました。