2013-12-16 6 views
13

मेरे पास एक चेतावनी के बारे में एक त्वरित सवाल है कि मैं एक सी # परियोजना पर विजुअल स्टूडियो में रिशेर्पर से प्राप्त कर रहा हूं जो मैं काम कर रहा हूं। चेतावनी है:रिशेर्पर में चेतावनी "शुद्ध विधि का रिटर्न वैल्यू का उपयोग नहीं किया जाता है"


"शुद्ध विधि की वापसी मूल्य नहीं किया जाता है"


विधि जहां यह हो रहा है के रूप में नीचे है:

private static bool FilePathHasInvalidChars(string userInputPath) 
    { 
     try 
     { 
      Path.GetFullPath(userInputPath);//this is where the warning appears 

     } 
     catch (Exception e) 
     { 
      Log.Error(String.Format(
       "The Program failed to run due to invalid characters or empty string value for the Input Directory. Full Path : <{0}>. Error Message : {1}.", 
       userInputPath, e.Message), e); 
      return true; 

     } 
     return false; 
    } 

मुझे लगता है कि मैं जानता हूँ कि क्यों चेतावनी हो रही है। मैं केवल अमान्य वर्णों के साथ सभी अपवादों को पकड़ने के उद्देश्य से Path.GetFullPath (पथ) का उपयोग कर रहा हूं। पथ को उपयोगकर्ता द्वारा इनपुट के रूप में आपूर्ति की जानी है इसलिए मैं वास्तव में (पथ। गेटफुलपाथ (userInputPath) के परिणाम का उपयोग नहीं करता हूं)। इसके लिए मेरे पास एकमात्र उपयोग एक चेक पर है जो मेरे पास इस विधि के लिए है, यह जांचने के लिए है कि मैं मुख्य विधि पर करता हूं ताकि यह सुनिश्चित किया जा सके कि पथ उपलब्ध नहीं है या उसके पास कोई अमान्य वर्ण नहीं है।

जगह है जहाँ मैं उपरोक्त विधि का उपयोग के रूप में नीचे है:

if (FilePathHasInvalidChars(inputDirectory)) 
     { 
      return; 
     } 

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

बहुत धन्यवाद, जेटनर।

उत्तर

18

नहीं, इससे आपके लिए कोई समस्या नहीं होनी चाहिए, क्योंकि वास्तव में आप इसका उपयोग कैसे करना चाहते हैं।

इस मामले में रिशेर्पर संकेत केवल एक सूचक है यदि आप एक चर बनाने के लिए भूल गए हैं जिसमें आपके द्वारा प्राप्त डेटा को रखना है। चूंकि आप अभी मान्य हैं, और वास्तव में उस डेटा की आवश्यकता नहीं है, तो आपको ठीक होना चाहिए।

संपादित करें: ध्यान दें कि आप संकेत से बच सकते हैं, और एक विशिष्ट Resharper टिप्पणी का उपयोग कर, इस तरह से यह स्पष्ट है कि इस उद्देश्य के पर है:

// ReSharper disable once ReturnValueOfPureMethodIsNotUsed 
Path.GetFullPath(userInputPath); 

# 2 संपादित करें :SynerCoder is probably right though, के बारे में System.IO.Directory.Exists() अपने विशिष्ट प्रयोजन के लिए एक बेहतर विकल्प ...

+0

धन्यवाद Kjartan। बस यह सुनिश्चित करना चाहता था कि यह ठीक है। मैं इस मामले में चेतावनी को भंग कर दूंगा। : डी – Jetnor

5

आप अपनी खुद की उपयोग नहीं करना चाहिए किया जा रहा है पथ अवैध है या नहीं, यह जांचने के लिए विधि। यदि आप एक निर्देशिका (inputDirectory) की जाँच कर रहे चूंकि आप निम्नलिखित कोड का उपयोग करना चाहिए:

if (!System.IO.Directory.Exists(inputDirectory)) 
{ 
    return; 
} 
+2

मैं ऐसा कर सकता था। इसका कारण यह है कि मैं ऐसा नहीं कर रहा हूं क्योंकि मैं इस विधि का उपयोग किसी अन्य पथ को सत्यापित करने के लिए करता हूं जो अस्तित्व में नहीं है लेकिन जो निर्देशिका के माध्यम से बनाया गया है। क्रिएट डायरेक्टरी इसलिए यह एक अच्छा तरीका है जिसे मैंने उपयोगकर्ता द्वारा प्रदान किए गए पथ के साथ कई मुद्दों की जांच करने के लिए पाया है। – Jetnor

7

अपने नमूना कोड में आप Exception पकड़ने निम्न में से कोई हो सकता है जो: ArgumentException, SecurityException, ArgumentNullException, NotSupportedException, PathTooLongException, लेकिन जब पथ में अमान्य वर्ण होते हैं तो फेंक दिया जा रहा है केवल ArgumentExceptionMSDN है।
इसके अलावा,

मैं पथ का उपयोग कर रहा हूं।अमान्य वर्णों के साथ सभी अपवादों को पकड़ने के उद्देश्य से केवल GetFullPath (पथ)।

आप बल्कि निम्नलिखित कोड का उपयोग करना चाहिए, और अपवाद हैंडलिंग छोड़ देते हैं:

foreach (char invalidChar in Path.GetInvalidPathChars()) 
{ 
    if (userInputPath.Contains(invalidChar)) 
    { 
     return true; 
    } 
} 
return false; 
+0

हाय यूरीवाई। इनपुट के लिए धन्यवाद। मूल रूप से मेरा कोड पकड़ लिया गया था (ArgumentException)। लेकिन मैंने देखा कि पथ। गेटफुलपाथ ने आपके द्वारा उल्लेख किए गए सभी अन्य अपवादों का उत्पादन किया है, मैंने उन्हें पकड़ने का फैसला किया है। इस तरह मैं इसे जल्दी पकड़ सकता हूं यदि कोई उपयोगकर्ता खाली स्ट्रिंग प्रदान करता है, या यदि कोई उपयोगकर्ता ऐसा कुछ करना चाहता है जहां उन्हें अनुमति नहीं है। :) – Jetnor

+0

यूरी के साथ सहमत हुए। मैंने यूरी के फ़ंक्शन कोड के लिए सिर्फ एक शॉर्टेंड के बारे में सोचा: 'वापसी उपयोगकर्ता इनपुटपैथ.इंडेक्सऑफएनी (पथ। गेटइनवालिडपाथ चार्स())> = 0? सच: झूठा' – RBT

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