我的一位客户每次try 使用我的产品时都会遇到一个例外.我获得了发生的异常的调用堆栈,其顶部是:
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)
在谷歌上搜索,我发现很多blog posts个声明当%temp%文件夹中的临时文件超过65535个时,就会抛出这个异常,解决方法就是简单地清除旧的临时文件.我可以要求客户这样做,但这可能只是一个临时解决方案——如果他们经常运行其他软件,频繁调用GetTempFileName,这会让问题反复出现,那该怎么办?
我不能仅仅通过编程清除%TEMP%文件夹,因为这可能会以某种方式损坏其他东西,我也不能避免调用GetTempFileName(并使用我自己的临时文件夹),因为调用它的不是我,而是WPF代码.
有什么永久的解决办法吗?
UPDATE:我已确认%TEMP%文件夹中日志(log)文件溢出的问题不是由我自己的代码引起的,必须是由客户机器上的其他第三方应用程序引起的.我还研究了Cursor.LoadFromStream
的实现,它肯定没有错——它生成了一个临时文件,但在finally
块中删除了它.