2010-05-27 18 views
5

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

तो अगर मैं डिस्क पर एक फ़ाइल में लिखने जा रहा हूं, तो क्या मैं इसे फ़ाइल नाम और फ़ाइल पथ के रूप में एक स्ट्रिंग पास करता हूं, या क्या कोई बेहतर प्रकार है जो आवश्यकता के लिए बेहतर होगा?

यह कोड गुंजाइश लगता है, और त्रुटि प्रवण? यदि स्ट्रिंग में डेटा होता है और सूची चालू होती है तो मुझे एक वैध फ़ाइल नाम होने पर भी जांच करने की पूरी आवश्यकता होगी।

निजी शून्य savefile (स्ट्रिंग fileNameAndPath) { // फ़ाइल को बचाने के लिए सामान्य सामान}

उत्तर

5

फ़ाइल नाम के लिए एक स्ट्रिंग ठीक है। .Net Framework फ़ाइल नामों के लिए स्ट्रिंग का उपयोग करता है, जो ठीक लगता है।

फ़ाइल नाम को सत्यापित करने के लिए आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं और System.IO.Path.GetInvalidFileNameChars के विरुद्ध अमान्य वर्णों की जांच कर सकते हैं। हालांकि, अपवाद को संभालने के द्वारा अमान्य फ़ाइल नामों के असाधारण मामलों को संभालना संभवतः होता है जो फ़ाइल को चलाने और बनाने के दौरान होता है - साथ ही आपको इसे भी करने की आवश्यकता होती है ....

+0

हम्म मैं अपने कोड का उपयोग करके अन्य लोगों से बचने की कोशिश कर रहा हूं, गलती न करें, क्या नियमित अभिव्यक्ति मेरे कोड की संभावित हूड में असफल नहीं होगी? –

+0

मुझे लगता है कि आपके पास एक बिंदु है। यहां मेरा व्यक्तिगत दृष्टिकोण आपकी विधि में फ़ाइल नाम को मान्य नहीं करना होगा - लेकिन वे दो सत्यापन विचार थे जो दिमाग में आए थे। आपकी विधि के उपयोगकर्ता को तर्कसंगत रूप से यह सुनिश्चित करना चाहिए कि वे आपकी विधि में एक वैध फ़ाइल नाम पास करें, या अपवाद को उठाने की अपेक्षा करें। – philhobgen

4

दुर्भाग्यपूर्ण यह है के रूप में, स्ट्रिंग .NET में ऐसा करने का मुहावरेदार तरीका है - अगर आप FileStream कन्स्ट्रक्टर आदि जैसी चीजों को देखें, वे स्ट्रिंग का उपयोग करते हैं।

आप FileInfo (या DirectoryInfo) का उपयोग करने पर विचार करें लेकिन यह कुछ असामान्य होगा।

+0

बात यह है कि, तुम बस स्थान और फ़ाइल नाम के लिए 2 वस्तुओं का उपयोग करने की आवश्यकता होगी। हालांकि वह सुरक्षा है जो आपको स्मृति में ओवरहेड के लायक नहीं देगी? मुझे एहसास है कि तार आदर्श है, लेकिन क्या यह सही है? –

+0

@Rihan: यह निर्भर करता है - आप किस सुरक्षा के बारे में सोच रहे हैं, बिल्कुल? मुझे यकीन नहीं है कि 'FileInfo' अधिक सत्यापन करता है। मेरा सुझाव है कि आप सोचें कि आप कौन सी गलतियों को रोकना चाहते हैं, और देखें कि 'FileInfo' वास्तव में आपकी मदद करता है या नहीं। –

1

आप इसे फ़ाइल पास करने के लिए FileInfo (System.IO से) का उपयोग कर सकते हैं, लेकिन फाइलों का जिक्र करते समय स्ट्रिंग कम या कम मानक हैं।

आप पथ से फ़ाइल नाम प्राप्त करने के लिए हमेशा पथ.गेटफाइलनाम ({yourstring}) का उपयोग कर सकते हैं।

0

स्ट्रिंग ठीक है, लेकिन आप यह सुनिश्चित करने के लिए कुछ प्रयास करना चाहिए कि फ़ाइल को आपके द्वारा अपेक्षित निर्देशिका में सहेजा जा रहा है।

0

यदि आप फ़ाइलपैथ के साथ काम कर रहे हैं तो एक स्ट्रिंग सामान्य है।

यदि आप एक यूआरएल के साथ काम कर रहे हैं तो आप सिस्टम का उपयोग करने पर विचार कर सकते हैं। यूआर कक्षा उदा।

Uri myUri = new Uri(myUrl, UriKind.Absolute); 

यह आप इस तरह के रूप में uri.Host गुणों के साथ काम करने के लिए अनुमति देगा, uri.Absolute पथ आदि यह भी आप यूआरएल में अलग उप-फ़ोल्डर के लिए एक स्ट्रिंग सरणी (सेगमेंट) दे देंगे।

MSDN यहाँ जानकारी: System.Uri

+0

वैसे यही कारण है कि मैंने इस सवाल से पूछा। मैं विरासत कोड की वजह से यूआरएल के तारों के रूप में काम कर रहा हूं, और फिर कुछ नई कार्यक्षमता को लागू करने का मौका मिला, और कोड का एक वर्ग बदल दिया, स्ट्रिंग का उपयोग न करने के लिए, बल्कि एक उरी। और यह कोड को और अधिक पठनीय और मजबूत बनाता है। मुझे आश्चर्य है कि एक स्ट्रिंग के रूप में डिस्क पर एक फ़ाइल में अभी भी एक स्थान का इलाज करेगा। मुझे लगता है कि इस बिंदु पर यह वही तरीका है। –

+1

स्ट्रिंग्स के रूप में फ़ाइल नाम मानक हैं। यह न भूलें कि आप System.IO.Path का उपयोग उन तारों को अधिक सुरक्षित रूप से कुशलतापूर्वक करने के लिए कर सकते हैं, उदा। पथ। कॉम्बाइन(), पथ। गेटफाइलनाम() और पथ। गेटफुलपाथ() ... –

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