निर्देशिका को हटाए बिना निर्देशिका की सभी सामग्री को आप कैसे हटाते हैं? मैं मूल रूप से एक फ़ोल्डर को खाली करना चाहता हूं फिर भी इसे छोड़ दें (और अनुमतियां) बरकरार रहें।NSFileManager निर्देशिका की सामग्री हटाएं
उत्तर
जैसे एक निर्देशिका प्रगणक का उपयोग करके:
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:path];
NSString *file;
while (file = [enumerator nextObject]) {
NSError *error = nil;
BOOL result = [fileManager removeItemAtPath:[path stringByAppendingPathComponent:file] error:&error];
if (!result && error) {
NSLog(@"Error: %@", error);
}
}
स्विफ्ट
let fileManager = NSFileManager.defaultManager()
let enumerator = fileManager.enumeratorAtURL(cacheURL, includingPropertiesForKeys: nil, options: nil, errorHandler: nil)
while let file = enumerator?.nextObject() as? String {
fileManager.removeItemAtURL(cacheURL.URLByAppendingPathComponent(file), error: nil)
}
इस प्रयास करें:
NSFileManager *manager = [NSFileManager defaultManager];
NSString *dirToEmpty = ... //directory to empty
NSError *error = nil;
NSArray *files = [manager contentsOfDirectoryAtPath:dirToEmpty
error:&error];
if(error) {
//deal with error and bail.
}
for(NSString *file in files) {
[manager removeItemAtPath:[dirToEmpty stringByAppendingPathComponent:file]
error:&error];
if(error) {
//an error occurred...
}
}
'contentsOfDirectoryAtPath :: के लिए इसकी आवश्यकता है' आप सामग्री का पूरा पथ नहीं देता है। –
"।" के लिए परीक्षण करने की कोई आवश्यकता नहीं है। या ".." के बाद से 'ContentOfDirectoryAtPath: त्रुटि' _filters_ उन्हें बाहर; दस्तावेज़ों से ** खोज उथला है और इसलिए किसी भी उपनिर्देशिका की सामग्री वापस नहीं करता है। इस लौटे सरणी में वर्तमान निर्देशिका ("।"), पैरेंट निर्देशिका (".."), या संसाधन कांटे ("._" से शुरू होता है) के लिए तार नहीं होते हैं और प्रतीकात्मक लिंक को पार नहीं करते हैं। ** – petert
@petert Whoa , यह एक बहुत पुराना जवाब है। जानकारी के लिए धन्यवाद। –
प्रलेखन contentsOfDirectoryAtPath:error:
के लिए कहते हैं:
खोज उथले है और इसलिए अन्य सबडायरेक्ट्रीज़ की सामग्री वापस नहीं करता है। इस लौटे सरणी में वर्तमान निर्देशिका ("।"), पैरेंट निर्देशिका (".."), या संसाधन कांटे ("._" से शुरू होता है) के लिए तार नहीं होते हैं और प्रतीकात्मक लिंक को पार नहीं करते हैं।
इस प्रकार:
---(file != @"." && file != @"..")---
अप्रासंगिक है।
क्यों संपूर्ण निर्देशिका को हटाया नहीं जाता है और बाद में फिर से बनाया जाता है? बस इसे हटाने से पहले फ़ाइल विशेषताएँ और अनुमतियां प्राप्त करें, और फिर इसे उसी विशेषताओं के साथ पुन: बनाएं।
यदि आप केवल इसकी सामग्री को हटा सकते हैं तो आप फ़ोल्डर को निकालना और संभावित समस्याओं (जैसे अनुमतियां) में क्यों भागना चाहते हैं? –
निर्देशिका को स्कैन करना और स्रोत कोड से फ़ाइलों को निकालना अक्सर बेहतर होता है क्योंकि यह पुनर्प्राप्ति और त्रुटियों की रिपोर्ट करने के लिए कहीं अधिक विश्वसनीय है। – petert
स्विफ्ट के लिए जॉर्ज फ्रित्ट्स्के का जवाब मेरे लिए काम नहीं करता था। एक स्ट्रिंग के रूप में गणना की गई वस्तु को पढ़ने के बजाय, इसे NSURL के रूप में पढ़ें।
extension NSFileManager {
func clearFolderAtPath(path: String) -> Void {
for file in subpathsOfDirectoryAtPath(path, error: nil) as? [String] ?? [] {
self.removeItemAtPath(path.stringByAppendingPathComponent(file), error: nil)
}
}
}
उसके बाद, आप इस तरह फ़ोल्डर साफ कर सकते हैं:
let fileManager = NSFileManager.defaultManager()
let url = NSURL(string: "foo/bar")
let enumerator = fileManager.enumeratorAtURL(url, includingPropertiesForKeys: nil, options: nil, errorHandler: nil)
while let file = enumerator?.nextObject() as? NSURL {
fileManager.removeItemAtURL(file, error: nil)
}
आप NSFileManager
इस तरह का विस्तार कर सकते NSFileManager.defaultManager().clearFolderAtPath("the folder's path")
तेज 2.0 में
:
if let enumerator = NSFileManager.defaultManager().enumeratorAtPath(dataPath) {
while let fileName = enumerator.nextObject() as? String {
do {
try NSFileManager.defaultManager().removeItemAtPath("\(dataPath)\(fileName)")
}
catch let e as NSError {
print(e)
}
catch {
print("error")
}
}
}
स्विफ्ट 2.1.1:
public func deleteContentsOfFolder()
{
// folderURL
if let folderURL = self.URL()
{
// enumerator
if let enumerator = NSFileManager.defaultManager().enumeratorAtURL(folderURL, includingPropertiesForKeys: nil, options: [], errorHandler: nil)
{
// item
while let item = enumerator.nextObject()
{
// itemURL
if let itemURL = item as? NSURL
{
do
{
try NSFileManager.defaultManager().removeItemAtURL(itemURL)
}
catch let error as NSError
{
print("JBSFile Exception: Could not delete item within folder. \(error)")
}
catch
{
print("JBSFile Exception: Could not delete item within folder.")
}
}
}
}
}
}
स्विफ्ट 3 अगर कोई एक त्वरित काट/चिपका
let fileManager = FileManager.default
let fileUrls = fileManager.enumerator(at: folderUrl, includingPropertiesForKeys: nil)
while let fileUrl = fileUrls?.nextObject() {
do {
try fileManager.removeItem(at: fileUrl as! URL)
} catch {
print(error)
}
}
- 1. NSFileManager
- 2. NSFileManager
- 3. NSFileManager setAttributes
- 4. NSFileManager बनाने निर्देशिका त्रुटि 518 NSFileWriteUnsupportedSchemeError
- 5. नैन में, निर्देशिका की सामग्री को कैसे हटाएं, लेकिन निर्देशिका ही नहीं?
- 6. दस्तावेज़ निर्देशिका की सामग्री को कैसे हटाएं (और दस्तावेज़ निर्देशिका स्वयं नहीं)?
- 7. एक निर्देशिका की सामग्री खोजें
- 8. NSFileManager - URLForDirectory ... या URLForDirectory
- 9. NSFileManager (Jailbreak)
- 10. कोको - NSFileManager
- 11. कैश निर्देशिका में सामग्री को कैसे निकालें?
- 12. गिट निर्देशिका हटाएं
- 13. उद्देश्य सी: निर्देशिका के तहत केवल सभी फाइलों को कैसे हटाएं, लेकिन निर्देशिका को स्वयं रखें
- 14. एएसपी.नेट एमवीसी की सामग्री/थीम्स/आधार निर्देशिका
- 15. Accurev: कैसे एक निर्देशिका की सामग्री नहीं बल्कि निर्देशिका
- 16. सभी निर्देशिका अनुमतियां हटाएं
- 17. VSMacros80 निर्देशिका हटाएं
- 18. निर्देशिका बनाएँ। यदि मौजूद है, तो निर्देशिका और उसकी सामग्री हटाएं और जावा
- 19. पथ की मूल निर्देशिका खोजें
- 20. निर्देशिका को दोबारा कैसे हटाएं?
- 21. एफ़टीपी गैर खाली निर्देशिका हटाएं
- 22. NSFileManager: enumeratorAtURL: NSFileManager के लिए URL का एक अलग रूप रिटर्न: URLForDirectory
- 23. निर्दिष्ट निर्देशिका में शून्य आकार की सभी फ़ाइलों को हटाएं
- 24. लिनक्स टर्मिनल से लॉग फ़ाइल की सामग्री को कैसे हटाएं?
- 25. जावा में केवल एक फ़ाइल की सामग्री को कैसे हटाएं?
- 26. इंडेक्स के सेट के आधार पर सरणी की सामग्री हटाएं
- 27. दस्तावेज़ निर्देशिका में सुरक्षित सामग्री
- 28. NSFileManager - फ़ाइल का आकार जांचें?
- 29. निर्देशिका सामग्री का पाठपरक प्रतिनिधित्व
- 30. NSFileManager removeItemAtPath लॉक मुख्य थ्रेड
यह जांचना न भूलें कि 'removeItemAtPath:' वास्तव में त्रुटि ऑब्जेक्ट का उपयोग करने का प्रयास करने से पहले विफल रहा है या नहीं। कम से कम, आप वास्तव में अधिक त्रुटियों की रिपोर्ट कर सकते हैं। –
@ पीटर: ओह, धन्यवाद। –
आपके लूप लूप में कोई समस्या है, आप थोड़ी देर के अंदर आपको चर घोषित नहीं कर सकते !! – Psycho