質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

475閲覧

Rubyで特定のファイルの削除方法

qa451

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/12/15 12:36

txt内に記述してある複数のファイル名を読み出し
fileutilsを使って
任意のディレクトリ内にある該当ファイルを削除したいのですが上手くいきません。
よろしくお願いします。

require "fileutils" f = File.open("C:/hoge.txt") s = f.read Dir.chdir ("C:/dir") FileUtils.rm(s)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

p sしてみたら良いと思いますよ。
おそらく、改行コードが入っているとかじゃないでしょうか。

#コメントを受けての追記
どうも、複数行に書かれた複数ファイルを削除したいようなので、こんな感じですね。
複数ファイルを削除したい場合は、Arrayにします。

Ruby

1require "fileutils" 2 3f = File.open("C:/hoge.txt") 4s = f.read.chomp.split("\n") 5Dir.chdir ("C:/dir") 6FileUtils.rm(s)

投稿2017/12/15 12:58

編集2017/12/16 19:03
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qa451

2017/12/16 14:43

やってみました。改行コードは\nですが この場合改行コードの有無だけが問題なのでしょうか?
otn

2017/12/16 15:24

> この場合改行コードの有無だけが問題なのでしょうか? どういう意味ですか?
qa451

2017/12/16 15:34

txtファイル内の改行コードの話では?
otn

2017/12/16 16:20 編集

sに改行コードが入っているのではと言う指摘です。 "abc.txt"という名前のファイルは、FileUtils.rm("abc.txt\n")では削除できません。
qa451

2017/12/16 16:26

あの、sに改行コードが入っているとはどういう意味でしょうか? そもそもまずこのコード自体正しい記述なのでしょうか。 そしてsに改行コードが入っていたとして問題点はそこだけだから出力に失敗しているのか とお聞きしているのですが。
qa451

2017/12/16 16:29

ああ、もちろん abc.txt\nなんて書き方はしていないのですが
otn

2017/12/16 17:13

> あの、sに改行コードが入っているとはどういう意味でしょうか? p s したら、"~~\n" と表示されるのではないかという意味です。 > そしてsに改行コードが入っていたとして問題点はそこだけだから出力に失敗しているのか 出力?削除のことですか?はい。失敗しますね。ファイル名が一致しないのだから当然です。
qa451

2017/12/16 17:20

ではabc.txt\nのような表記になっていないので問題は別のところにあると思われるのですが
otn

2017/12/16 17:42

sに改行コードは含まれていないと言うことですね。 エラーメッセージは何でしょうか?
qa451

2017/12/16 17:56

C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:1341:in `unlink': Invalid argument @ u nlink_internal - a.txt (Errno::EINVAL) b.txt c.txt from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:1341:in `block in remove_ file' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:1349:in `platform_support ' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:1340:in `remove_file' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:704:in `remove_file' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:507:in `block in rm' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:506:in `each' from C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb:506:in `rm' from test5.rb:6:in `block in <main>' from test5.rb:5:in `chdir' from test5.rb:5:in `<main>' となっています
otn

2017/12/16 18:32

不正な文字が入っているとかですかね。 p s の結果を正確にコピペして下さい。
qa451

2017/12/16 18:45

"a.txt\nb.txt\nc.txt" となっています
otn

2017/12/16 18:57

\nが入ってるじゃないですか。それが原因です。 最初の回答で、 > p sしてみたら良いと思いますよ。 > おそらく、改行コードが入っているとかじゃないでしょうか。 と書いた通り。 3行に書かれた3つのファイルを削除したいのですよね。書かれたプログラムからは1ファイルを削除したいとしか思えません。 回答に追記しておきます。
qa451

2017/12/16 19:01 編集

つまり ・p sを用いる以前にhoge.txt内の記述の仕方がおかしかった ・コードそのものは間違っていなかった ということが言いたかったということでよかったのでしょうか。 できれば後者を早く伝えてもらいたかったのですがそれはともかく 当方の質問としては「txt内に記述してある複数のファイル名」を参照して該当ファイルを削除したいのですが \nを用いず複数のファイル名を記述するにはどうしたら良いのでしょうか。
otn

2017/12/16 19:06

質問の1行目に「複数」と書いてありましたね。プログラムに引っ張られて、そっちに気がついてませんでした。失礼しました。
qa451

2017/12/16 19:08

追記のコードをさっそく試しました。 まさに当方が目指しているものです! 長い間回答に付き合って頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問