在深度C#中调试FileNotFoundException

时间:2014-09-15 13:35:26

标签: c# windows-mobile filestream

当我创建FileStream时,我遇到了随机FileNotFoundExceptions的问题。文件路径是正确的,文件存在,我仍然随机获得FileNotFoundException。我该如何更详细地调试这个?我正在运行Windows Mobile 6项目,这是个例外:

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)

这是抛出异常的方法:

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

        }

我无法想到任何可能导致这种情况发生的事情,有没有办法更深入地调试?

1 个答案:

答案 0 :(得分:1)

调试这应该是直截了当的。在try/catch块之前的代码中添加以下内容:

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

这将使您进入文件不存在的状态。无论如何,您应该在生产代码中打开文件之前检查是否存在,以防止在应用程序运行时文件被删除或正在使用等文件。