2009-03-20 12 views
14

का उपयोग करने के बजाय तारों के रूप में पथों को पारित करने के अच्छे कारण मेरे नए कोड में मैं निर्देशिका पथ या फ़ाइल नामों को पार करने के लिए स्ट्रिंग का उपयोग कर रहा हूं। इसके बजाय मैं DirectoryInfo और FileInfo का उपयोग कर रहा हूं क्योंकि वे बहुत सारी जानकारी को समाहित करते हैं।DirectoryInfo/FileInfo

मैं तार का उपयोग करता है, जब तक वे निर्देशिका वे तलाश कर रहे हैं का हिस्सा प्राप्त निर्देशिका जानकारी तो वे "विभाजन" और "मध्य" और "instr" लंबे समय से समझ से बाहर बयान में पारित करने के लिए कोड का एक बहुत कुछ देखा है।

क्या तारों के रूप में पथ पारित करने का कोई अच्छा कारण है?

उत्तर

10

सामान्यतः, मुझे लगता है कि FileInfo/DirectoryInfo में जानकारी रखना बेहतर है। इन कक्षाओं में उपयोगी कार्यक्षमता का एक बहुत है, साथ ही में शामिल सुरक्षा का एक बहुत है कि यह एक फ़ाइल के होने की जाँच करने के लिए, मूल रूप से निर्दिष्ट फ़ाइल देखें बहुत आसान है, आदि

केवल जगह मैं कहाँ होगा है (संभावित रूप से) फ़ाइलइन्फो और डायरेक्टरीइन्फो का उपयोग करने के बजाय एक स्ट्रिंग के रूप में एक मार्ग पारित करें, यदि पथ ऐपडोमेन्स या प्रक्रियाओं के बीच पारित किया जा रहा था, तो

फ़ाइलइन्फो और निर्देशिकाइन्फो दोनों AppDomain सीमाओं में ठीक काम करते हैं (क्योंकि वे ' पुनः serializable), लेकिन इस स्थिति में उनके पास एक उचित राशि अधिक है। यदि चीजें बहुत आगे जा रही हैं, तो इसका असर हो सकता है।

मैं इस मामले में FileInfo और DirectoryInfo के साथ रहूंगा, हालांकि, जब तक मुझे नहीं पता कि मेरी प्रोफाइलिंग के दौरान एक उल्लेखनीय समस्या थी, और मैं धारावाहिक डेटा की मात्रा को कम करने की कोशिश कर रहा था। अगर मैं प्रदर्शन के मुद्दों में भाग नहीं पाता, तो मैं इन कक्षाओं का उपयोग करने के साथ रहना चाहता था, क्योंकि वे बहुत सारी सुरक्षा और कार्यक्षमता प्रदान करते हैं।

+0

ध्यान दें कि फ़ाइल ने अपना अस्तित्व या संशोधित टाइमस्टैम्प बदल दिया है, तो आपको एक नया FileInfo/DirectoryInfo बनाना होगा। – sighol

4

एक बार पथ एक एप्लिकेशन में है (यानी एक सादा पाठ कॉन्फ़िगरेशन फ़ाइल में नहीं), नहीं, कोई अच्छा कारण नहीं है।

एकमात्र समय (मैं सोच सकता हूं) यह उपयोगी हो सकता है जब कोड के साथ अंतःक्रिया करता है जो पथों को केवल स्ट्रिंग के रूप में स्वीकार करता है।

5

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

Path.GetFileName
Path.GetDirectoryName
Path.Combine
आदि ...

उन System.IO.Path वर्ग से हैं, btw।

+0

याद रखें, जब आप किसी फ़ंक्शन में कोई उदाहरण गुजर रहे हैं, तो यह संदर्भ की एक प्रति गुजर रहा है, न कि संपूर्ण ऑब्जेक्ट की एक प्रति! तो आप वास्तव में गुजर रहे हैं एक सूचक की प्रति है ... –

+0

मेरा मानना ​​है कि समस्या यह नहीं है कि कितने बाइट पास हो गए हैं, बल्कि फ़ाइलइन्फो/डायरेक्टरीइन्फो का उपयोग करने के ऊपर की ओर, जिसे फ़ाइल को इसके बारे में जानकारी कैश करने के विभिन्न तरीकों से जांचना है। –

+1

लेकिन पहले पठनीयता के लिए अनुकूलित करें। –

0

डीएमजेड के लिए FileInfo पास करते समय मुझे समस्याएं आई हैं। जहां तक ​​मैं देख सकता हूं - अगर मैं गलत हूं तो मुझे सही करें - फाइलइन्फो deserializing जब एक अनुमति जांच करता है और यह DMZ से काम नहीं करेगा और नतीजतन 'पथ नहीं मिला'। इसके बजाय आपके द्वारा डेटा के साथ एक कस्टम ऑब्जेक्ट बनाएं और पास करें।

0

मुझे लगता है कि आपको कच्चे तारों का उपयोग करने और स्थैतिक सिस्टम का उपयोग करके उन्हें छेड़छाड़ करने के बजाय एक फ़ाइल या निर्देशिका पथ को समाहित करने के लिए कक्षा की आवश्यकता होती है .IO.Path क्लास। हालांकि, I don't find DirectoryInfo and FileInfo suitable, क्योंकि वे पथ संचालन के बजाय फ़ाइल/निर्देशिका मैनिपुलेशन करने के लिए और अधिक इरादा रखते हैं। यदि आप पथ हेरफेर के लिए कस्टम क्लास बनाते हैं, तो आप more user friendly path manipulation functionality प्रदान कर सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^