我和這個問題的海報完全一樣:Ruby (Errno::EACCES) on File.delete。與他不同,他爲解決方案提供的更改對我來說不起作用。File.delete上的紅寶石(Errno :: EACCES) - 以前的解決方案不起作用
這裏是我的代碼,這就是我想刪除原始文件的壓縮算法:
uncompressed_file = File.new(Rails.root + filepath)
compressed_file = File.new(Rails.root + "#{filepath[0..filepath.size - 1]}.gz", "w+b")
file_writer = Zlib::GzipWriter.new(compressed_file)
buf = ""
File.open(uncompressed_file, "rb") do | uncompressed |
while uncompressed.read(4096, buf)
file_writer << buf
end
file_writer.close
end
begin
files_changed_by_chmod = File.chmod(0777, uncompressed_file)
rescue
puts "Something happened"
end
puts "Number of files changed by CHMOD : " + files_changed_by_chmod.to_s
File.delete(uncompressed_file)
File.rename(Rails.root + "#{filepath[0..filepath.size - 1]}.gz", Rails.root + filepath)
你會發現有一對夫婦puts
在那裏,確認什麼是使用chmod發生。輸出是這樣的:
Number of files changed by CHMOD : 1
並沒有Something happened
。因此,運行chmod不會產生錯誤,並且chmod確實會修改一個文件(大概是uncompressed_file
)。但是,我仍然在刪除行上收到Errno :: EACCESS錯誤。
爲什麼我不能刪除這些文件?它把我推上了牆。我正在運行Windows 8和Ruby 1.9.3。
編輯:下面的第一個答案解決了不能刪除文件的問題;然而,它會使我的代碼嘗試執行的作業無效(即,當我的文件通過解決方案中提供的壓縮算法運行,然後運行其他算法時,文件會損壞)。是的,我也嘗試在我的通貨膨脹方法中效仿這裏的編碼風格,但這沒有幫助。這裏是執行加密,解密代碼的我的檔案休息,減壓:
def inflate_attachment(filepath)
compressed_file = File.new(Rails.root + filepath)
File.open(compressed_file, "rb") do | compressed |
File.open(Rails.root + "#{filepath[0..filepath.size - 7]}_FULL.enc", 'w+b') do | decompressed |
gz = Zlib::GzipReader.new(compressed)
result = gz.read
decompressed.write(result)
gz.close
end
end
end
def encrypt_attachment(filepath, cipher)
unencrypted_file = File.new(Rails.root + filepath)
encrypted_file = File.new(Rails.root + "#{filepath[0..filepath.size - 1]}.enc", "w")
buf = ""
File.open(encrypted_file, "wb") do |outf|
File.open(unencrypted_file, "rb") do |inf|
while inf.read(4096, buf)
outf << cipher.update(buf)
end
outf << cipher.final
end
end
end
def decrypt_attachment(filepath, key, iv)
cipher = OpenSSL::Cipher.new(ENCRYPTION_TYPE)
cipher.decrypt
cipher.key = key
cipher.iv = iv
encrypted_file = File.new(Rails.root + filepath)
decrypted_file = File.new(Rails.root + "#{filepath[0..filepath.size - 5]}.dec", "w")
buf = ""
File.open(decrypted_file, "wb") do |outf|
File.open(encrypted_file, "rb") do |inf|
while inf.read(4096, buf)
outf << cipher.update(buf)
end
outf << cipher.final
end
end
end
嗨Sascha,非常感謝這個迴應。它看起來非常優雅,代碼確實允許我刪除原始文件 - 但是,它會導致壓縮文件失去完整性(在我對它進行加密,解密並再次解壓縮之後)。我將用其餘的代碼更新原始問題。 –
很高興我可以幫助至少與文件刪除問題。 –
原來,我的代碼中的其他內容完全導致了完整性崩潰的問題。這實際上是針對揭示其他問題(它與路徑相關)的刪除問題的修復。再次感謝Sascha。 –