我的应用程序使用sqlite数据库来存储用户的内容。对于重度用户,此数据库可以增长到1 GB +。数据库当前存储在ApplicationData(%appdata%)中,但是此文档表明它用于漫游数据,这些数据应该很小,例如应该在会话中保持的设置。其他一些选择:
LocalApplicationData:文档表明这是用于在用户注销时可能被删除的数据。
MyDocuments / Personal:我相信这也会漫游。
UserProfile:文档说"应用程序不应该在此级别创建文件或文件夹"
存储位置的一些要求:
非常感谢您对Windows系统上这样一个地方的任何建议。
答案 0 :(得分:4)
如果用户具有重定向("漫游")应用程序数据文件夹和/或重定向文档文件夹,则用户可能经常使用多台计算机并期望其内容可用于无论他或她登录哪台机器。因此,您很可能应该使用漫游应用程序数据文件夹或文档文件夹。
我最初的本能是倾向于前者,因为用户通常不喜欢在他们的文档文件夹中看到神秘和/或意外的文件,并且可能倾向于删除它们。另一方面,漫游应用程序数据文件夹不太可能被备份(我们不要!)所以,总的来说,我推荐文档文件夹;为了缓解其他问题,将数据库放在Documents的子文件夹中,并为子文件夹提供一个非常清晰的名称。
本地数据文件夹通常用于非用户内容,例如缓存和临时文件。我不知道有任何专业产品存储用户内容。 IT人员可能会理所当然地认为删除这些文件夹中的任何内容是安全的,并且已经指出有系统配置为自动执行此操作。
你当然不应该使用UserProfile;如果用户配置文件正在漫游,则每次用户注销时内容都将上传到服务器,并在用户登录时下载(如果需要)。(这只是 为UserProfile的真实;漫游应用程序数据文件夹和其他重定向文件夹直接从服务器访问,永远不会位于本地磁盘上。)
我不相信文件的大小必然会使重定向文件夹不合适。例如,Mozilla Thunderbird将用户的邮件存储在漫游应用程序数据文件夹中,这可能会变得非常大。据我所知,这并没有造成任何普遍的问题。
但是,有一些Windows API无法在网络文件上使用,如果要访问该文件的任何进程在不同的安全性下运行,它也不会起作用上下文(例如,作为系统服务)。您应该检查sqlite的文档以确定是否支持。
如果您无法使用网络驱动器,我认为唯一的好办法是默认情况下使用文档文件夹,但检测它何时在网络上并要求最终用户选择其他位置。
在任何情况下,您都应该向系统管理员或最终用户(或两者!)提供覆盖默认位置的文档化支持方式。
答案 1 :(得分:3)
对于每用户存储,您需要AppData / Local文件夹。环境变量是%localappdata%。 .NET枚举是Environment.SpecialFolder.LocalApplicationData
。
至于“文档表明这是用于在用户注销时可以删除的数据。”......
是。但这种情况很少见。例如,虚拟客户端上的用户可能会遇到这种情况(想想Citrix)。在这些情况下,拥有持久的1GB SqlLite存储将是一个问题。对于我们这些常规工作站的用户,数据可能不会被删除。