2012-01-13 7 views
5

Üzerinde çalıştığım bir FileSystemWatch programım var ve bir dosya kopyalamada bir hata varsa, hangi dosyanın başarısız olduğunu bilmek istiyorum. Aynı zamanda, iç izlenme bilgilerinin yanı sıra yığın izini de tutabilmek isterim.Yeni yığın Arası yığın izleme ve iç özel durum bilgilerini korurken Özel Durum

   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)); 
       } 
      } 

Yani, iletilir istisna, hala StackTrace bilgi olduğunu, iç istisna bilgi sahibi olmak istiyorum ama "mesaj" o başarısız dosya hangi içeren benim özel ileti olmak istiyorum Orijinal istisna tarafından atılan "gerçek" mesajı görüntülerken.

+1

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

+1

tam olarak yeni bir istisna oluşturarak Neden? – Oded

+0

@Oded bu yüzden gerçek istisna mesajında ​​hata olan dosyayı alabilirim – ganders

cevap

8

Eski istisnayı ex.InnerException yerine iç istisna olarak kabul etmek için değiştirdim. Yeni istisna örneğinizde ToString() öğesini çağırırsanız, tam yığın izlemeyi ve tüm iç özel durumları içerir.

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

Teşekkür ederiz @jrummell – ganders