我正在使用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')
你確定這是你認爲這是導致問題的線?它實際上在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