我正在尝试逐行读取包含字符串值的文件,并为每个字符串值创建相应的文件夹/目录。
#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)选项,但仍然是同样的问题。
请提出任何建议。感谢
答案 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行结尾。
chomp
和strip
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"