在深度C#中调试FileNotFoundException

本文关键字:调试 FileNotFoundException 深度 | 更新日期: 2023-09-27 18:21:52

我在创建FileStream时遇到随机FileNotFoundException问题。文件路径是正确的,文件存在,但我仍然会随机获得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();
            }
        }

我想不出任何可能导致这种情况的原因,有什么方法可以更深入地调试吗?

在深度C#中调试FileNotFoundException

调试应该很简单。在try/catch块之前将以下内容添加到代码中:

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

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