我的一位客户在尝试使用我的产品时遇到了异常。我得到了已经发生的异常的调用栈,最上面的是:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.__Error.WinIOError()
at System.IO.Path.GetTempFileName()
at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
at System.Windows.Input.Cursor..ctor(Stream cursorStream)
谷歌搜索,我发现很多博客文章指出当 %TEMP% 文件夹中有超过 65535 个临时文件时会引发此异常,解决方案是简单地清除旧的临时文件。我可以要求客户这样做,但这可能只是一个临时解决方案 - 如果他们经常运行其他一些软件,这些软件会频繁调用 GetTempFileName,这会导致问题反复出现怎么办?
我不能只是以编程方式清除 %TEMP% 文件夹,因为这可能会以某种方式损坏其他东西,而且我无法避免调用 GetTempFileName(并使用我自己的临时文件夹),因为调用它的不是我而是 WPF 代码。
有什么永久的解决方案吗?
更新:我已经确认 %TEMP% 文件夹溢出日志文件的问题不是由我自己的代码引起的,而一定是由客户机器上的其他一些 3rd 方应用程序引起的。我还研究了它的实现,Cursor.LoadFromStream
它肯定没有错——它会生成一个临时文件,然后将其删除finally
。