.net 您可以依赖哪些windows环境变量?

.net 您可以依赖哪些windows环境变量?,.net,windows,environment-variables,system-variable,.net,Windows,Environment Variables,System Variable,我正在编写一个需要存储一些临时文件的应用程序(我正在通过环境变量查找临时位置) 我知道环境变量是可变的,这意味着它们可能存在,也可能不存在,但有没有比其他变量更安全的环境变量 例如,我可以在windows 7上使用APPDATA,但我相信在windows XP上不一定会用到它。我强烈建议不要出于您的目的使用环境变量 如果您确实觉得必须使用环境变量,我建议您在可能需要使用的主机上手动定义这些变量 不同的主机可能具有相同的环境变量,指向具有不同安全设置和不同用途的其他文件夹。您可以使用%temp%或

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

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


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

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

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


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

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

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

或尝试此链接以创建临时文件:

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

  • 返回当前用户临时文件夹的路径

  • 在用户的临时文件夹中创建具有唯一名称的空文件

  • 临时文件夹实际上是使用环境通过使用找到的。通常文件夹为
    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和不同的环境(如终端服务器)中可靠运行。

    因此,您是否建议我创建自己的应用程序使用环境?@jamie取决于您需要将这些临时文件放在何处。如果路径依赖于主机,则可以通过命令行命令获取信息。为了更适合本地使用,您可以使用xml作为示例。我认为,更多地研究可能的路径将为您提供解决方案通常,对于.NET代码,您应该依靠接受枚举值的方法和方法来完成艰巨的工作。此外,如果您需要处理每一种奇怪的情况,则可以在未定义环境变量的状态下启动程序。所以答案可能是“无”。始终使用Path.GetTempFileName()为临时文件获取可靠的名称。
    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);