无法创建写入文件
问题描述:
我正在使用carrierwave
上传txt
文件。这些文件不小(80 MB - 500 MB),我想删除一些行以减小此大小(大约80%的文件大小将减少)。无法创建写入文件
我已经为了创建了一个模型的方法来清除这些行:
require 'fileutils'
def clear_unnecessary_lines
old_file_path = Rails.root.join('public').to_s + log_file.to_s
new_file_path = old_file_path.sub! '.txt', '_temp.txt'
File.open(old_file_path, 'r') do |old_file|
File.open(new_file_path, 'w') do |new_file|
old_file.each_line do |line|
new_file.write(line) unless line.grep(/test/).size > 0
end
end
end
FileUtils.mv new_file_path, old_file_path
end
,但我得到的错误,当我试图open
新文件说有没有这样的文件。因为我有read用w
选项打开一个文件应该创建一个空文件进行写入。那为什么我得到这样的错误?
此外,由于log_file
列保留原始文件的路径,我正在改变它,你能告诉如何用新名称重命名新文件吗?正如我检查,我应该只指定old
和new
名称,而不是路径。
Errno::ENOENT: No such file or directory - /home/gotqn/Rails/LogFilesAnalyser/LogFilesAnalyser/public/uploads/log_file/log_file/3/log_debug_temp.txt
奇怪的是,如果我在轨控制台执行以下命令,它不引发错误,并创建的文件。
File.open('/home/gotqn/Rails/LogFilesAnalyser/LogFilesAnalyser/public/uploads/log_file/log_file/3/log_debug_temp.txt','w')
答
啊,我现在看到你的问题了。当你这样做
new_file_path = old_file_path.sub! '.txt', '_temp.txt'
你打电话的sub
的“自我改变”版本,即sub!
。这实际上会改变old_file_path
的值作为副作用。然后,在下一行中,尝试打开尚未创建的文件。拿出感叹号,你应该没问题。
你确定这是你认为这是导致问题的线?它实际上在File.open(old_file_path,'r')'上出错吗?使用“w”选项的File.open不需要该文件已经存在,但需要使用“r”选项来存在该文件(因为它正在读取它)。 – 2014-09-05 09:10:08
@MaxWilliams是的,我确定。我已经评论了关于'new_file'的代码,它正在工作。另外,请注意错误是关于'log_debug_temp.txt','old_file'的名称是'log_debug.txt' – gotqn 2014-09-05 09:13:03
脚本是否以必要的权限运行? – BroiSatse 2014-09-05 09:34:43