2009-07-03 14 views
15

मैं बस सोच रहा था की DirectoryInfo है में एक नया FileInfo बनाने से आपको उदाहरण के लिए जब:सी #: एक निर्देशिका है कि आप

var dir = new DirectoryInfo(@"C:\Temp"); 

वहाँ एक आसान/साफ रास्ता है कि निर्देशिका के लिए एक नया फ़ाइल जोड़ने के लिए है उसके बाद यह?

var file = new FileInfo(Path.Combine(dir.FullName, "file.ext")); 

मैं मैं शायद सिर्फ एक विस्तार विधि या कुछ और, लेकिन उत्सुक कर सकते हैं कुछ पहले से मौजूद है, तो यह है कि यहाँ नहीं देख सकते हैं सोच रहा हूँ ... मैं मतलब DirectoryInfo करता है, उदाहरण के लिए GetFiles() विधि है।

+0

अपने प्रश्न में कोड (विकी के रूप में चिह्नित के रूप में मैं वास्तव में मूल्य यहाँ नहीं जोड़ रहा ...) –

उत्तर

19

क्या यह संभव है कि आप क्या करना चाहते है? शीर्षक "एक नई फाइल बनाना" कहता है। एक FileInfo ऑब्जेक्ट फ़ाइल नहीं है; यह एक फ़ाइल के बारे में जानकारी रखने वाली वस्तु है (जो मौजूद हो या न हो)। यदि आप वास्तव में फ़ाइल फ़ाइल बनाना चाहते हैं, तो ऐसा करने के कई तरीके हैं।

File.WriteAllText(Path.Combine(dir.FullName, "file.ext"), "some text"); 

आप के बजाय FileInfo वस्तु के आधार पर फ़ाइल बनाना चाहते हैं, तो आप निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं::

var dir = new DirectoryInfo(@"C:\Temp"); 
var file = new FileInfo(Path.Combine(dir.FullName, "file.ext")); 
if (!file.Exists) // you may not want to overwrite existing files 
{ 
    using (Stream stream = file.OpenWrite()) 
    using (StreamWriter writer = new StreamWriter(stream)) 
    { 
     writer.Write("some text"); 
    } 
} 

एक तरफ ध्यान दें के रूप में: सबसे सरल तरीकों में से एक यह होगा यह dir.FullName है, dir.FullPath नहीं।

+0

ओह, अच्छी कॉल। फुलपाथ संरक्षित क्षेत्र था। पूर्ण नाम संपत्ति है। बस एमएसडीएन सदस्य पृष्ठ को थोड़ा तेज़ स्कैन किया गया :) – Svish

2

तुम क्यों उपयोग नहीं करते हैं:

File.Create(@"C:\Temp\file.ext"); 

या

var dir = new DirectoryInfo(@"C:\Temp"); 
File.Create(dir.FullName + "\\file.ext"); 
+6

IMO, ओपी में सही है मेरे लिए अधिकार के बारे में लग रहा है + –

+0

के बजाय Path.Combine का उपयोग करना क्योंकि मेरे पास DirectoryInfo और फ़ाइल नाम है। दोनों एक साथ नहीं। – Svish

1

जबकि Directorynfo.GetFiles() विधियां मौजूद हैं, वे केवल डिस्क पर मौजूद फ़ाइलों को वापस लौटते हैं। Path.Combine काल्पनिक पथों के बारे में है।

प्रयास करें इन एक्सटेंशन तरीके:

public static FileInfo CombineWithFileName(this DirectoryInfo directoryInfo, string fileName) 
    { 
     return new FileInfo(Path.Combine(directoryInfo.Name, fileName)); 
    } 

    public static DirectoryInfo CombineWithDirectoryName(this DirectoryInfo directoryInfo, string directoryName) 
    { 
     return new DirectoryInfo(Path.Combine(directoryInfo.Name, directoryName)); 
    } 
+6

मैं हमेशा निराश था कि .NET ढांचा एक समृद्ध प्रकार में पथ को समाहित करने के लिए आगे नहीं चला था। वे 'फाइलइन्फो' और 'डायरेक्टरीइन्फो' को छोड़ सकते थे, 'पथ' को एक इंस्टेंस प्रकार बनाया, और हमारे पास बहुत सी प्रकार की सुरक्षा होगी जहां आज हमारे पास केवल स्ट्रिंग हैं। –

संबंधित मुद्दे