Ruby无法创建目录

时间:2017-05-10 07:47:10

标签: ruby

我正在尝试逐行读取包含字符串值的文件,并为每个字符串值创建相应的文件夹/目录。

#require 'fileutils'

value=File.open('D:\\exercise\\list.txt').read
value.gsub!(/\r\n?/, "\n")
value.each_line do |line|
    line.chomp
    print "FOlder names:#{line}"
    Dir.mkdir("D:\\exercise\\#{line}")
end

我收到以下错误:

read_folders_svn.rb:8:in `mkdir': Invalid argument - Australia (Errno::EINVAL)
        from read_folders_svn.rb:8:in `block in <main>'

list.txt文件的内容

Australia
USA
EUrope
Africa
ANtartica

我尝试打印值及其工作正常,同时创建面临上述问题的相应目录,甚至尝试使用fileutils(fileutils.mkdir)选项,但仍然是同样的问题。

请提出任何建议。感谢

2 个答案:

答案 0 :(得分:5)

错误在于:

line.chomp

它从line的尾部剥离换行符并返回一个被忽略的值。它不会更改line的值。它仍以"\n"结尾,这是Windows上文件名中不允许的字符。代码在Linux上运行良好,并创建名称以"\n"结尾的目录。

解决方案也很简单。请改用#chomp!

#require 'fileutils'

value=File.open('D:\\exercise\\list.txt').read
value.gsub!(/\r\n?/, "\n")
value.each_line do |line|
    line.chomp!
    print "FOlder names:#{line}"
    Dir.mkdir("D:\\exercise\\#{line}")
end

(但由于输入中的空行,它可能仍然会产生错误。)

答案 1 :(得分:4)

您是否检查过该行不包含多余字符? line.chomp!可以解决您的问题但line.strip!可能是更强大的变体,例如,如果您有\ r \ n的Windows行结尾。

chompstrip

之间的差异
  

String#chomp在字符串的末尾操作,而String#strip   在字符串的开头和结尾处操作。 String#chomp需要一个   可选的'记录分隔符'参数,而String#strip则不   参数。如果String#chomp没有给出参数,它将被删除   car从正在操作的字符串的末尾返回字符   on(\ r,\ n或\ r \ n)。如果String#chomp传递一个字符串作为   参数,该字符串从字符串的末尾删除   经营。 String#strip将删除前导和尾随null和   正在操作的字符串中的空格字符。

"Cadel Evans".chomp(' Evans') # => "Cadel"

"Cadel Evans\r\n".chomp # => "Cadel Evans"

"\tRobbie McEwen\r\n".strip # => "Robbie McEwen"