2012-01-13 20 views
5

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

   if (!found) 
      { 
       try 
       { 
        File.Copy(file, Path.Combine(watchDirectory, filename)); 
       } 
       catch (Exception ex) 
       { 
        WriteToLog(new Exception(
         String.Format("An error occurred syncing the Vault location with the watch location. Error copying the file {0}. Error = {1}", file, ex.Message), ex.InnerException)); 
       } 
      } 

तो, अपवाद पारित हो कि, मैं अभी भी स्टैकट्रेस की जानकारी है कि, भीतरी अपवाद जानकारी चाहते हैं, लेकिन मैं "संदेश" जो फ़ाइल उस पर विफल रही है जिसमें अपने कस्टम संदेश होना चाहता हूँ, मूल अपवाद द्वारा फेंक दिया गया "असली" संदेश भी प्रदर्शित करते हुए।

+1

http://stackoverflow.com/questions/57383/in-c-how-can-i-rethrow-innerexception-without-losing-stack-trace –

+1

क्यों वास्तव में आपको कोई नया अपवाद बना रहे हैं? – Oded

+0

@ ओडेड इसलिए मेरे पास फ़ाइल हो सकती है जिसमें वास्तविक अपवाद संदेश में त्रुटि थी – ganders

उत्तर

8

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

try 
{ 
    // ... 
} 
catch (Exception ex) 
{ 
    string message = String.Format("An error occurred syncing the Vault location with the watch location. Error copying the file {0}.", file); 
    Exception myException = new Exception(message, ex); 
    string exceptionString = myException.ToString(); // full stack trace 
    //TODO: write exceptionString to log. 
    throw myException; 
} 
+0

धन्यवाद @ jrummell – ganders

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