字符串替换中的ERRNO :: EACCES

时间:2013-02-08 07:51:42

标签: ruby string

我正在尝试编写一个替换字符串的程序。

require File.join(APP_ROOT, 'lib', 'main.rb') 
files_names = Dir.entries("../DeSpacer")
files_names.each do |file_name|
  File.open("#{file_name}", "w") do |text|
  text.each {|line| line.gsub!(/\.\s{2,}/, "\.\s")}
  end
end

我一直在

Permission denied -. (ERRNO::EACCES)

你能解释一下我做错了吗?

1 个答案:

答案 0 :(得分:2)

最初的问题是你只是打开文件进行写入('w'),而不是阅读,从而接收异常。

正如上面提到的评论一样,代码也存在其他问题。

This answer提供了一种更典型的方式来做你想做的事情。

正如another answer中提到的同一个问题,Ruby也有一个从Perl继承的命令行快捷方式,这使得这样的事情变得微不足道:

ruby -pi.bak -e "gsub(/oldtext/, 'newtext')" *.txt

这将编辑一个或多个文件,使用后缀“.bak”备份以前的版本。

来自Programming Ruby

-i [extension}
' Edits ARGV files in place. For each file named in ARGV, anything you write to 
standard output will be saved back as the contents of that file. A backup copy of
the file will be made if extension is supplied.
% ruby -pi.bak -e "gsub(/Perl/, 'Ruby')" *.txt