2012-09-09 17 views
30

मैं रूबी में एक गैर-खाली निर्देशिका को हटाने की कोशिश कर रहा हूं और इससे कोई फर्क नहीं पड़ता कि मैं इसके बारे में किस तरह से जाता हूं, यह काम करने से इंकार कर देता है। मैं FileUtils, प्रणाली निरिक्षण रिकर्सिवली दिया निर्देशिका में जा रहा है और सब कुछ को हटाने, लेकिन हमेशा के साथ अंत करने लगते हैं (अस्थायी?) फ़ाइलों का उपयोग कर की कोशिश की है इस तरह केरूबी निर्देशिका को हटाने

.__ afsECFC
.__ afs73B9

के रूप में

कोई भी जानता है कि यह क्यों हो रहा है और मैं इसके आसपास कैसे जा सकता हूं?

+0

आप आप कैसे क्या विधि आप बुला रहे हैं हमें दिखा सकते हैं और आप कैसे हैं इसे बुलाओ कारण मैं पूछता हूं क्योंकि @ismaelga का जवाब भी मेरे लिए ठीक काम करता है। –

+0

मैंने 'FileUtils.rm_rf ('directorypath/name')' @ismealga के साथ-साथ '' rm -rf @ {path} '' का उपयोग करने का प्रयास किया था, लेकिन क्योंकि मैं अपनी फ़ाइलों को सही ढंग से बंद नहीं कर रहा था, वे उन अस्थायी लोगों को बना रहे थे – Ced

उत्तर

9

मेरी त्रुटि को समझ लिया गया, कुछ फाइलें बंद नहीं हुई थीं। मैंने पहले मेरे कार्यक्रम में मैं

File.open(filename).read 

जो मैं एक

f = File.open(filename, "r") 
while line = f.gets 
    puts line 
end 
f.close 

के लिए बदली और अब

FileUtils.rm_rf(dirname) 

काम करता है दोषरहित

+5

यदि आप पूरी फ़ाइल पढ़ रहे हैं, तो आप 'फ़ाइल.read फ़ाइल नाम' कर सकते हैं '(कम से कम एमआरआई में, मुझे नहीं लगता कि जेआरबी या रूबिनीस अभी तक इसका समर्थन करता है), और यदि आप इसे दिखाना चाहते हैं, तो ब्लॉक फॉर्म का उपयोग करना बेहतर है, क्योंकि यह सुनिश्चित करता है कि फ़ाइल बंद हो जाती है: 'फाइल.ओपेन (फ़ाइल नाम, "आर") {| फाइल | ...} 'या' File.foreach (फ़ाइल नाम) {| लाइन | ...} ' –

80
require 'fileutils' 

FileUtils.rm_rf('directorypath/name') 

क्या यह काम नहीं करता है?

+0

नहीं, यह उन फ़ाइलों को बनाता है, और – Ced

+0

निर्देशिका को हटा नहीं सकता है क्योंकि आपके पास उन्हें हटाने की अनुमति नहीं है? –

+0

मुझे यकीन है कि मुझे उन्हें बदलने की अनुमति है, क्योंकि वे एक ही प्रोग्राम में बनाए जा रहे हैं, और मैं बिना किसी समस्या के व्यक्तिगत फाइलों को हटा सकता हूं – Ced

26

सुरक्षित विधि का उपयोग किया गया था: FileUtils.remove_dir(somedir)

+3

यह सही जवाब है – Sam

4

मैं एक साधारण पुनरावर्ती विधि का उपयोग कर रहा है "एक aditional lib का उपयोग किए बिना" अपने सभी सामग्री के साथ एक निर्देशिका को दूर करने के लिए सबसे अच्छा तरीका लगता है:

def remove_dir(path) 
    if File.directory?(path) 
    Dir.foreach(path) do |file| 
     if ((file.to_s != ".") and (file.to_s != "..")) 
     remove_dir("#{path}/#{file}") 
     end 
    end 
    Dir.delete(path) 
    else 
    File.delete(path) 
    end 
end 
remove_dir(path) 
संबंधित मुद्दे