我正在编写一个需要使用存储一些临时文件的应用程序(我通过环境变量找到临时位置)。
据我所知,环境变量是可变的,这意味着它们可能存在也可能不存在,但有哪些比其他更安全依赖于那里?
例如我可以在Windows 7上使用APPDATA
,但我相信它不一定在Windows XP上。
答案 0 :(得分:2)
我建议您使用.NET API可以提供的一些支持,而不是直接使用环境。临时文件有两个功能:
Path.GetTempPath()
返回当前用户临时文件夹的路径。
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和不同环境(例如终端服务器)上可靠地运行。
答案 1 :(得分:0)
我强烈建议您不要将环境变量用于您的目的。
如果您确实认为必须使用环境变量,我建议您在可能需要使用的主机上手动定义这些变量。
不同的主机可能具有相同的环境变量,指向具有不同安全设置和不同用途的其他文件夹。
答案 2 :(得分: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/