【问题标题】:What windows environment variables can you rely on being there?您可以依赖哪些 Windows 环境变量?
【发布时间】:2012-12-06 22:45:39
【问题描述】:

我正在编写一个需要使用存储一些临时文件的应用程序(我正在通过环境变量找到临时位置)。

我了解环境变量是可变的,这意味着它们可能存在也可能不存在,但有没有比其他环境变量更安全的环境变量?

例如,我可以在 Windows 7 上使用 APPDATA,但我相信它不一定在 Windows XP 上。

【问题讨论】:

  • 通常,对于 .NET 代码,您应该依赖 Environment.SpecialFolder 和接受该枚举值的方法来完成艰苦的工作。
  • 另外,如果您需要处理所有奇怪的情况 - 可以在未定义 no 环境变量的状态下启动程序。所以答案可能是“无”。
  • 始终使用 Path.GetTempFileName() 获取临时文件的可靠名称。

标签: .net windows environment-variables system-variable


【解决方案1】:

我建议您使用 .NET API 可以提供的一些支持,而不是直接使用环境。临时文件有两个功能:

  1. Path.GetTempPath()返回当前用户临时文件夹的路径。

  2. Path.GetTempFileName() 在用户的临时文件夹中创建一个具有唯一名称的空文件。

临时文件夹实际上是使用环境通过使用Windows GetTempPath function 找到的。通常该文件夹为C:\Users\UserName\AppData\Local\Temp

如果您想要一个特定于应用程序的文件夹供您自己使用,您可以使用一个特殊文件夹:

const String CompanyName = "Acme Industries";
const String ApplicationName = "FooBar";
var subfolderName = Path.Combine(CompanyName, ApplicationName);
var folderName = Path.Combine(
  Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
  subfolderName
);
Directory.CreateDirectory(folderName);

通常创建的文件夹名称为C:\Users\UserName\AppData\Acme Industries\FooBar。您的应用程序可以免费使用此文件夹,并且不会遇到“只读”问题。

依靠标准 API,您的应用程序可以在不同版本的 Windows 和不同环境(例如终端服务器)上可靠地运行。

【讨论】:

    【解决方案2】:

    您可以使用 %temp% 或以下代码作为文件路径:

    string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".FileExtension";
    

    string fileName = System.IO.Path.GetTempPath() + "FileName.FileExtension";
    

    或者试试这个链接来创建临时文件: http://www.daveoncsharp.com/2009/09/how-to-use-temporary-files-in-csharp/

    【讨论】:

      【解决方案3】:

      我强烈建议不要将环境变量用于您的目的。

      如果您确实觉得必须使用环境变量,我建议您在可能需要使用的主机上手动定义这些变量。

      不同的主机可能有相同的环境变量指向具有不同安全设置和不同用途的其他文件夹。

      【讨论】:

      • 那么您会建议我创建自己的环境供我的应用程序使用吗?
      • @jamie 取决于您需要放置此临时文件的位置。如果路径取决于主机,例如,您可以通过命令行命令获取信息。对于更多本地用途,您可以使用 xml 例如。我认为对可能的路径进行更多研究将为您提供解决方案
      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2021-11-18
      • 2015-11-14
      • 2016-03-29
      • 1970-01-01
      • 2018-10-18
      相关资源
      最近更新 更多