2008-11-06 46 views
41

我需要为我的应用程序存储日志文件和配置文件。最适合存放它们的地方在哪里?在Windows上为我的程序存储配置文件和日志文件的最佳位置?

现在,我只是使用当前目录,最终将它们放到我的程序所在的Program Files目录中。

日志文件可能会被用户有点定期访问,因此%APPDATA%似乎有点难以到达。

%USERPROFILE%\My Documents最好的目录吗?它需要适用于所有版本的Windows,从2000年开始。

+0

也参见[这个问题](http://stackoverflow.com/questions/1556082/as-a-developer-how-should-i-use-the-special-folders-in-vista-and-windows- 7) – 2010-08-17 07:12:54

回答

28

如果你不使用ConfigurationManager来管理你的应用程序和用户设置,你应该。 .NET Framework中的配置工具包经过深思熟虑,与之交互的Visual Studio工具也是如此。

ConfigurationManager的默认行为在正确的位置放置了不变的(应用程序)和可修改的(用户)设置:应用程序设置进入应用程序文件夹,用户设置进入System.Environment.SpecialFolder.LocalApplicationData。它可以在支持.NET的所有版本的Windows下正常工作。

至于日志文件,System.Environment.SpecialFolder.LocalApplicationData通常是你想放置它们的地方,因为它保证是用户可写的。

当然有些情况下你不会 - 例如,如果要将文件写入网络共享,以便您可以轻松地远程访问它们。实现它的方法有很多种,但其中大多数方法都是从创建包含共享文件夹路径的应用程序设置开始的。所有这些都涉及管理。

我有几个关于ConfigurationManager和VS工具的投诉:需要更好的高级文档,以及VS生成的Settings类更好的文档。 app.config文件变成目标构建目录中的应用程序配置文件的机制是不透明的(以及所有最常见问题之一的来源:“我的连接字符串发生了什么事?”)。如果有创建没有默认值的设置的方法,我还没有找到它。

0

我使用隔离存储进行配置。您也可以使用Temp文件夹来存储日志等临时信息。

+3

把你的应用程序日志放在Temp文件夹中是一个坏主意。 – RWendi 2008-11-06 19:35:26

+0

这是您的意见。日志应该是暂时的......可能取决于您的应用程序。 – 2008-11-06 19:58:26

+3

,我要说的却是“日志应该是暂时的”是你的意见为好。年 – 2012-10-18 13:50:03

1

最好的答案取决于日志和配置的性质。如果它们是程序范围的,并且不需要在卸载应用程序后继续存在,那么我认为它们没有问题。如果日志和配置是用户特定的,或者需要在卸载后仍然存在,那么它们属于%USERPROFILE% - %APPDATA%作为这种类型的“适当”基本目录下的某处。

4

不要将配置文件存储在应用程序文件夹中,微软声称这不是理想的位置。 Windows一直在转向阻止写入C:\ Program Files \,并且您会在Vista中发现任何试图在此处写入的应用程序,都会触发UAC警告。

Windows 7将允许用户自定义他们使用(期待一些电力用户阻止大多数)和你的应用程序将失败/冻结,如果用户从来没有批准该写什么企图UAC弹出窗口。

如果你使用正确的用户配置文件和应用程序数据的变量,然后运2000,XP,Vista中,和Win7将数据映射到正确的写友好的文件夹,没有UAC弹出窗口。

8

对于应用程序设置 - 使用System.Environment.SpecialFolder.ApplicationData - 这是存储漫游配置文件数据的位置,因此它允许用户在域中的不同计算机上登录和工作。

日志文件 - System.Environment.SpecialFolder.LocalApplicationData

5

说实话%APPDATA%仍是把你的配置文件和日志文件,因为它提供一个占位符存储的目的,最好的地方你应用数据。它不应该很难访问,只需在资源管理器中写入%appdata%,然后直接转到%appdata%目录。

2

您可以使用SHGetSpecialFolderPath:

int MAX_PATH = 255; 

CString m_strMyPath; 

SHGetSpecialFolderPath(NULL, m_strMyPath.GetBuffer(MAX_PATH), CSIDL_COMMON_APPDATA, TRUE); 

这将指定的特殊文件夹路径',您可以安全地写入日志为窗口:

对于XP:C:\Documents and Settings\All Users\Application Data

对于Vista: C:\ProgramData

查看MSDN页面:http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx

8

注意:您可以通过使用下面的函数获取路径LocalApplicationData文件夹中的.NET:

string strPath=System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); 
5

接受的答案指出,日志文件的下面是一个好去处。 System.Environment.SpecialFolder.LocalApplicationData这等同于您可以看到的用户特定路径C:\Users\[User]\AppData\Roaming。像接受的答案中提到,这是一个保证用户写入的位置,并可以为某些情况下

你可以运行在一个网络帐户您的应用程序,您自己或同事可能需要尝试网络应用程序环境

但是和有用跟踪每个应用程序的确切日志。我个人喜欢使用非用户特定的位置枚举 System.Environment.SpecialFolder.CommonApplicationData,相当于C:\ProgramData。是的,您需要为您创建的任何文件夹指定访问权限,但通常是一次性交易,然后所有应用程序日志都可以存在于一个愉快的位置。

此外,虽然四处寻找互联网,有一个项目在那里以编程方式设置的写入权限对文件夹您在CommonApplicationData创建,Allow write/modify access to CommonApplicationData