首页 > 解决方案 > 你能假设总是有一个 Windows 临时文件夹吗?

问题描述

如何为当前用户获取临时文件夹这个问题很好地描述了如何去寻找要用于当前用户的临时文件夹。

Path.GetTempPath它的文档中,仅指出了一个由于安全权限而可能出现的异常。

如果找不到临时文件夹,则不会提及故障模式。

无临时文件夹的情况是否现实?或者丢失的临时文件夹是否表明 Windows 之类的东西被更普遍地丢弃了?

我想这个问题可以归结为:如果没有,需要临时文件夹尝试的应用程序是否需要检测/恢复/正常处理?或者,在正常工作的 Windows PC 上应该发生的事情之外,你可以盲目地依赖它吗?

(就我个人而言,我从来没有遇到过没有工作临时位置的 PC,但我们偶尔会收到来自最终用户的报告,似乎是这种情况。但是,我可以想象这些信息中有一些噪音)。

标签: .netwindowstemporary-filestemp

解决方案


我们在特定的 Windows Server 系统上有一个缺少临时文件夹的错误 - 一定有一些错误配置或类似的。此外,用户有权手动创建文件夹,因此我们只是在启动过程中添加了“如果缺少创建临时文件夹”保护措施。

但是,是的,这肯定是非常出乎意料的行为,我只在 1000 多个系统中的 1 个系统上看到过它。

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the path specified
   at Microsoft.Win32.NativeMethods.CreateDirectory(String path, SafeLocalMemHandle acl)
   at System.CodeDom.Compiler.TempFileCollection.CreateTempDirectoryWithAce(String directory, String identity)
   at System.CodeDom.Compiler.TempFileCollection.GetTempFileName(String tempDir)
   at System.CodeDom.Compiler.TempFileCollection.EnsureTempNameCreated()
   at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension, Boolean keepFile)
   at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension)
   at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)

尚未尝试此操作,但在 C# 中似乎开销很小并节省了零星的麻烦:

    private void GenerateTempPathIfNeeded()
    {
        var path = Path.GetTempPath();
        try
        {
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"something");
        }
    }

推荐阅读