Ruby的新手,可能是愚蠢的
尝试创建目录以便在其中存储文件。这是我的代码
def generateParsedEmailFile
apath = File.expand_path($textFile)
filepath = Pathname.new(apath + '/' + @subject + ' ' + @date)
if filepath.exist?
filepath = Pathname.new(filepath+ '.1')
end
directory = Dir.mkdir (filepath)
Dir.chdir directory
emailText = File.new("emailtext.txt", "w+")
emailText.write(self.generateText)
emailText.close
for attachment in @attachments
self.generateAttachment(attachment,directory)
end
end
这是我得到的错误
My-Name-MacBook-2:emails myname$ ruby etext.rb email4.txt
etext.rb:196:in `mkdir': Not a directory - /Users/anthonydreessen/Developer/Ruby/emails/email4.txt/Re: Make it Brief Report Wed 8 May 2013 (Errno::ENOTDIR)
from etext.rb:196:in `generateParsedEmailFile'
from etext.rb:235:in `<main>'
答案 0 :(得分:4)
我能够重新创建错误 - 看起来像email4.txt是常规文件,而不是目录,所以你不能将它作为目录路径的一部分使用。
答案 1 :(得分:2)
如果您切换到mkdir_p
并获得相同的错误,则'/Users/anthonydreessen/Developer/Ruby/emails/email4.txt/Re: Make it Brief Report Wed 8 May 2013'
中指定的父项之一可能已作为常规文件存在,并且不能被视为目录。可能最后一个名为email.txt
答案 2 :(得分:1)
你有正确的想法,但应该更具体地说明你正在打开的文件。更改当前工作目录非常麻烦,因为它会在整个过程中更改它并且可能会搞砸应用程序的其他部分。
require 'fileutils'
def generate_parsed_email_file(text_file)
path = File.expand_path("#{@subject} #{date}", text_file)
while (File.exist?(path))
path.sub!(/(\.\d+)?$/) do |m|
".#{m[1].to_i + 1}"
end
end
directory = File.dirname(path)
unless (File.exist?(directory))
FileUtils.mkdir_p(directory)
end
File.open(path, "w+") do |email|
emailText.write(self.generateText)
end
@attachments.each do |attachment|
self.generateAttachment(attachment, directory)
end
end
我冒昧地使这个例子明显更像Ruby:
for
非常罕见,each
更加灵活。File.open
方法在文件可以打开时产生一个块,在块完成时自动关闭。