The Labs \ Source Viewer \ SSCLI \ System.IO \ FileLoadException

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. /*============================================================
  16. **
  17. ** Class:  FileLoadException
  18. **
  19. **
  20. ** Purpose: Exception for failure to load a file that was successfully found.
  21. **
  22. **
  23. ===========================================================*/
  24. using System;
  25. using System.Globalization;
  26. using System.Runtime.Serialization;
  27. using System.Runtime.CompilerServices;
  28. using System.Security.Permissions;
  29. using SecurityException = System.Security.SecurityException;
  30. namespace System.IO
  31. {
  32.    
  33.     [Serializable()]
  34.     [System.Runtime.InteropServices.ComVisible(true)]
  35.     public class FileLoadException : IOException
  36.     {
  37.        
  38.         private string _fileName;
  39.         // the name of the file we could not load.
  40.         private string _fusionLog;
  41.         // fusion log (when applicable)
  42.         public FileLoadException() : base(Environment.GetResourceString("IO.FileLoad"))
  43.         {
  44.             SetErrorCode(__HResults.COR_E_FILELOAD);
  45.         }
  46.        
  47.         public FileLoadException(string message) : base(message)
  48.         {
  49.             SetErrorCode(__HResults.COR_E_FILELOAD);
  50.         }
  51.        
  52.         public FileLoadException(string message, Exception inner) : base(message, inner)
  53.         {
  54.             SetErrorCode(__HResults.COR_E_FILELOAD);
  55.         }
  56.        
  57.         public FileLoadException(string message, string fileName) : base(message)
  58.         {
  59.             SetErrorCode(__HResults.COR_E_FILELOAD);
  60.             _fileName = fileName;
  61.         }
  62.        
  63.         public FileLoadException(string message, string fileName, Exception inner) : base(message, inner)
  64.         {
  65.             SetErrorCode(__HResults.COR_E_FILELOAD);
  66.             _fileName = fileName;
  67.         }
  68.        
  69.         public override string Message {
  70.             get {
  71.                 SetMessageField();
  72.                 return _message;
  73.             }
  74.         }
  75.        
  76.         private void SetMessageField()
  77.         {
  78.             if (_message == null)
  79.                 _message = FormatFileLoadExceptionMessage(_fileName, HResult);
  80.         }
  81.        
  82.         public string FileName {
  83.             get { return _fileName; }
  84.         }
  85.        
  86.         public override string ToString()
  87.         {
  88.             string s = GetType().FullName + ": " + Message;
  89.            
  90.             if (_fileName != null && _fileName.Length != 0)
  91.                 s += Environment.NewLine + String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("IO.FileName_Name"), _fileName);
  92.            
  93.             if (InnerException != null)
  94.                 s = s + " ---> " + InnerException.ToString();
  95.            
  96.             if (StackTrace != null)
  97.                 s += Environment.NewLine + StackTrace;
  98.            
  99.             try {
  100.                 if (FusionLog != null) {
  101.                     if (s == null)
  102.                         s = " ";
  103.                     s += Environment.NewLine;
  104.                     s += Environment.NewLine;
  105.                     s += FusionLog;
  106.                 }
  107.             }
  108.             catch (SecurityException) {
  109.                
  110.             }
  111.            
  112.             return s;
  113.         }
  114.        
  115.         protected FileLoadException(SerializationInfo info, StreamingContext context) : base(info, context)
  116.         {
  117.             // Base class constructor will check info != null.
  118.            
  119.             _fileName = info.GetString("FileLoad_FileName");
  120.            
  121.             try {
  122.                 _fusionLog = info.GetString("FileLoad_FusionLog");
  123.             }
  124.             catch {
  125.                 _fusionLog = null;
  126.             }
  127.            
  128.         }
  129.        
  130.         private FileLoadException(string fileName, string fusionLog, int hResult) : base(null)
  131.         {
  132.             SetErrorCode(hResult);
  133.             _fileName = fileName;
  134.             _fusionLog = fusionLog;
  135.             SetMessageField();
  136.         }
  137.        
  138.         public string FusionLog {
  139.             [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy)]
  140.             get { return _fusionLog; }
  141.         }
  142.        
  143.         [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
  144.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  145.         {
  146.             // Serialize data for our base classes. base will verify info != null.
  147.             base.GetObjectData(info, context);
  148.            
  149.             // Serialize data for this class
  150.             info.AddValue("FileLoad_FileName", _fileName, typeof(string));
  151.            
  152.             try {
  153.                 info.AddValue("FileLoad_FusionLog", FusionLog, typeof(string));
  154.             }
  155.             catch (SecurityException) {
  156.             }
  157.         }
  158.        
  159.         static internal string FormatFileLoadExceptionMessage(string fileName, int hResult)
  160.         {
  161.             return String.Format(CultureInfo.CurrentCulture, GetFileLoadExceptionMessage(hResult), fileName, GetMessageForHR(hResult));
  162.         }
  163.        
  164.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  165.         private static extern string GetFileLoadExceptionMessage(int hResult);
  166.        
  167.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  168.         private static extern string GetMessageForHR(int hresult);
  169.     }
  170. }

Developer Fusion