2014-09-15 3 views
0

Je rencontre des problèmes avec les exceptions FileNotFoundException aléatoires lorsque je crée un FileStream. Le chemin du fichier est correct, le fichier existe, mais je reçois FileNotFoundException à des moments aléatoires. Comment puis-je déboguer cela plus en détail? Je dirige un projet Windows Mobile 6 et c'est l'exception:Déboguer FileNotFoundException en profondeur C#

System.IO.FileNotFoundException: Could not find file '\Program Files\xxx\xxx\xxx-11133.bin'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String str) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 

Ceci est la méthode qui jette l'exception:

internal static FInstance ReadAndDecrypt(string key, string fiId) 
     { 
      FileInfo fileInfo = new FileInfo(FullFilePath(fiId)); 

      FileStream fileStream = null; 
      CryptoStream cryptoStream = null; 
      GZipInputStream zipStream = null; 

      try 
      { 
       int time = Environment.TickCount; 
       fileStream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read); 

       var serializer = new XmlSerializer(typeof(FInstance)); 
       var FInstance = (FInstance)serializer.Deserialize(fileStream); 

       return Instance; 
      } 
      catch (Exception e) 
      { 
       Log.Error(e); 
       return null; 
      } 
      finally 
      { 
       if (fileStream != null) 
        fileStream.Close(); 
      } 

     } 

Je ne peux pas penser à tout ce qui pourrait provoquer ce, est-il possible de déboguer cela plus profondément?

+0

L'appelez-vous plusieurs fois pour le même fichier? Êtes-vous sûr qu'aucun autre programme/code ne modifie ce fichier? – Default

+0

@Hans, il n'y a pas de lettres de lecteur dans Windows CE. – ctacke

Répondre

1

Le débogage devrait être simple. Ajouter ce qui suit dans votre code juste avant votre bloc try/catch:

if((!fileInfo.Exists) && (Debugger.IsAttached)) 
{ 
    Debugger.Break(); 
} 

Cela vous rendre à l'état où le fichier est pas là. Vous devriez vérifier l'existence avant d'ouvrir le fichier dans votre code de production de toute façon pour protéger contre des choses comme le fichier en cours de suppression ou en cours d'utilisation pendant que votre application est déjà en cours d'exécution.