2009-04-10 12 views
8

किसी कारण से मुझे कोई नहीं मिल रहा है, लेकिन किसी ने पहले ही .NET IO लाइब्रेरी रैपर बनाया होगा। मैं फाइल.इक्सिस्ट इत्यादि को कॉल करने में सक्षम होना चाहता हूं, और निर्मित स्थिर तरीके इस पर अच्छी तरह से उधार नहीं देते हैं।.NET फ़ाइल सिस्टम रैपर लाइब्रेरी

+0

के बारे में बताएं आप से क्या मतलब है की अनुमति देता है "स्थिर में बनाया तरीकों यह करने के लिए अच्छी तरह से उधार नहीं है।" आप किस कार्यक्षमता की तलाश कर रहे हैं .NET प्रदान नहीं करता है? –

+2

निर्भरता इंजेक्शन, मॉकिंग और कुछ भी जो स्थिर विधियों और कक्षाओं के साथ बहुत कठिन है – leora

उत्तर

2

FileInfo class भी है, जो स्थिर विधियों के समान ही काम करता है।

दूसरी तरफ, आप शायद FileInfo कक्षा की पूरी तरह से नकल नहीं करना चाहते हैं। इसके बजाय, आप अपने सभी फाइल ऑपरेशंस को एक ही कक्षा में रखना चाहते हैं, फिर कक्षा से एक इंटरफ़ेस निकालें (सार्वजनिक विधियों का वर्णन करना), और निष्पादित करने के लिए इंटरफ़ेस का उपयोग करें, न कि पूरे सेट के माइक्रोसॉफ्ट सोचता है कि ऑपरेशन FileInfo कक्षा में होना चाहिए।

0

लाइब्रेरी की तलाश करने के बजाय जो पूरे फाइल सिस्टम को लपेटता है। एक साधारण IFileSystem इंटरफ़ेस क्यों न बनाएं और आपको आवश्यक विधियों को जोड़ने शुरू करें।

आपके आवेदन IFileSystem पर निर्भर होना चाहिए के बाकी जो

मजाक आप एक कार्यान्वयन कि बस स्थिर तरीकों कि नेट आप देता है और फिर अपना कोड इंटरफेस पर निर्भर कर सकता कॉल कर सकते हैं के लिए अनुमति देगा।

+3

यही वह है जो मैंने पहले किया था, लेकिन मैं इस परियोजना पर लगातार इस इंटरफ़ेस को फिर से बनाने के थक गया हूं। यहां थोड़ा कोड पुनः उपयोग करने के लिए खोज रहे हैं। – Sneal

+0

इसे एक साझा लाइब्रेरी में डाल दें और इसे अपनी सभी परियोजनाओं में संदर्भित करें – leora

+3

मुझे लगता है कि स्नील सोच रहा है "लेकिन अगर आप अपने घर के समाधान की तुलना में कुछ खुले स्रोत और शायद अधिक परिपक्व परियोजना को पकड़ सकते हैं तो अपना खुद का निर्माण क्यों करें। यह पहिया का पुन: आविष्कार करने के बारे में नहीं है। –

3

सभी अच्छे उत्तरों, लेकिन उन सभी ने मुझे छोड़ दिया जहां मैंने शुरू किया - प्रत्येक परियोजना के लिए कुछ प्रकार के आईफाइल सिस्टम को दोबारा शुरू करना। मैंने .NET पुस्तकालयों के आस-पास एक सामान्य IFileSystem लाइब्रेरी बनाने का अंत किया है जिसे मैं अपनी सभी परियोजनाओं के बीच पुन: उपयोग का उपयोग कर सकता हूं। अच्छा नहीं है, लेकिन यह अभी के लिए काम करता है।

9

मुझे आपके कुछ मिनट पहले SystemWrapper मिला, लेकिन आपका उद्देश्य मेरे उद्देश्यों को बेहतर बनाता है।

1

मैं कोडप्लेक्स पर Jolt.NET प्रोजेक्ट को बनाए रखता हूं, जिसमें ऐसे इंटरफेस उत्पन्न करने और आपके लिए उनके कार्यान्वयन के लिए एक लाइब्रेरी है। अधिक जानकारी के लिए कृपया Jolt.Testing लाइब्रेरी देखें।

+1

यदि आप गितब में जाते हैं और Nuget पैकेज बनाते हैं तो अधिक लोग इसका उपयोग करेंगे। मैं सिर्फ इसलिए कि एक नजदीक देखो भी नहीं लेता ... – CodingYourLife

1

https://github.com/tathamoddie/System.IO.Abstractions आप इस (GitHub से उदाहरण)

public class MyComponent 
{ 
readonly IFileSystem fileSystem; 

// <summary>Create MyComponent with the given fileSystem implementation</summary> 
public MyComponent(IFileSystem fileSystem) 
{ 
    this.fileSystem = fileSystem; 
} 
/// <summary>Create MyComponent</summary> 
public MyComponent() : this( 
    fileSystem: new FileSystem() //use default implementation which calls System.IO 
) 
{ 
} 

public void Validate() 
{ 
    foreach (var textFile in fileSystem.Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly)) 
    { 
     var text = fileSystem.File.ReadAllText(textFile); 
     if (text != "Testing is awesome.") 
      throw new NotSupportedException("We can't go on together. It's not me, it's you."); 
    } 
} 
} 
संबंधित मुद्दे