1

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

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

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

4

3 回答 3

2

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

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

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

临时文件夹实际上是通过使用Windows GetTempPath 函数使用环境找到的。通常该文件夹将是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 和不同环境(例如终端服务器)上可靠地运行。

于 2012-12-19T15:30:29.733 回答
0

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

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

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

于 2012-12-19T14:54:13.130 回答
0

您可以使用 %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/

于 2012-12-19T15:00:26.303 回答