2010-10-27 10 views
10

मेरे पास पूरी तरह से योग्य पथ (रूट/test/thing1/thing2/file.txt) वाली फ़ाइलों का संग्रह है। मैं इस संग्रह पर foreach चाहता हूं और फ़ाइल को पथ में परिभाषित स्थान में छोड़ देता हूं, हालांकि, यदि कुछ निर्देशिका मौजूद नहीं है, तो मैं उन्हें स्वचालित रूप से बेहतरीन रूप से बनाना चाहता हूं। मेरे प्रोग्राम में एक डिफ़ॉल्ट "ड्रॉप स्थान" है, जैसे z:/। "ड्रॉप स्थान" खाली हो जाता है, इसलिए ऊपर दिए गए मेरे उदाहरण में, पहले आइटम को स्वचालित रूप से z:/root/test/thing1/thing2/file.txt बनाने के लिए आवश्यक निर्देशिकाएं बनाना चाहिए। मैं यह कैसे कर सकता हूँ?स्वचालित रूप से लंबे पथ से निर्देशिकाएं बनाएं

उत्तर

16
foreach (var relativePath in files.Keys) 
{ 
    var fullPath = Path.Combine(defaultLocation, relativePath); 
    var directory = Path.GetDirectoryName(fullPath); 

    Directory.CreateDirectory(directory); 

    saveFile(fullPath, files[relativePath]); 
} 

जहां फ़ाइलें IDictionary<string, object> है।

10
string somepath = @"z:/root/test/thing1/thing2/file.txt"; 
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName((somepath)); 
3

चेक IO namespace (Directory, Path), मुझे लगता है कि वे आप

using System.IO 

तो यह जाँच में मदद करेंगे ..

string fileName [email protected]"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName); 
if (!Directory.Exists(directory)) 
    Directory.CreateDirectory(directory); 
7
Directory.CreateDirectory("/root/...") 

सभी निर्देशिका और में उपनिर्देशिका बनाता है निर्दिष्ट पथ

+0

सहमत, अगर निर्देशिका मौजूद है के रूप में यह इस आंतरिक रूप से करता है की जाँच करने की कोई जरूरत। – Squirrel

1
string filename = "c:\\temp\\wibble\\wobble\\file.txt"; 
string dir = Path.GetDirectoryName(filename); 
if (!Directory.Exists(dir)) 
{ 
    Directory.CreateDirectory(dir); 
} 
File.Create(filename); 

उपयुक्त अपवाद हैंडलिंग के साथ।

0

मुझे निष्पादन की शुरुआत में "डिफ़ॉल्ट स्थान" को ढूंढने में मदद मिली है और थोड़ा अनावश्यक कोड कम हो गया है (उदाहरण के लिए, Path.Combine(defaultLocation, relativePath))।

उदाहरण:

var defaultLocation = "z:/"; 
Directory.SetCurrentDirectory(defaultLocation); 
Directory.SetCurrentDirectory(AppContext.BaseDirectory);