我被要求更新过去6年一直在WinXP上运行的VB6应用程序。客户端想要使用Windows 7.到目前为止,应用程序将其设置存储在位于应用程序目录中的INI文件中。 XP和7之间的一个关键区别是你不能再写C:\Program Files\AppFolder
了。
我想弄清楚文件系统应该在哪里存储设置?鉴于应用程序仍然需要在WinXP上运行,我有点困惑。
在WinXP上,我有以下内容:
C:\Documents and Settings\profilename\Application Data
C:\Documents and Settings\profilename\Local Settings\Application Data
在Windows 7上,我有以下内容:
C:\Users\profilename\AppData\Local
C:\Users\profilename\AppData\LocalLow
C:\Users\profilename\AppData\Roaming
这些文件夹中的每一个都有子文件夹,似乎存储各种产品的设置/文件
所以有2个问题:
答案 0 :(得分:12)
您可以在XP / Vista / Windows 7上使用许多特殊文件夹:
CSIDL_APPDATA
文件夹是您可能最感兴趣的文件夹。此处存储的数据可供漫游用户登录的任何计算机使用。这是存储简单配置数据的最佳位置。所有用户都对此(以及最后一个)文件夹具有写入权限。请注意,上述文件夹均不适用于用户生成的数据!这将属于My Documents层次结构。 CSIDL_LOCAL_APPDATA
应用程序数据,这些应用程序数据始终是当前计算机的本地应用程序,但是基于每个用户进行预留。此文件夹中的数据在漫游的基础上不可用,因此它应该是用户在登录到其他计算机时可能不会错过的数据。 我无耻地从Karl Peterson的good article复制了上面的解释,为VB6程序员解释了这一点。 Karl还有一个ready-to-use class可以帮助你找到目录,但恕我直言,这次他过于复杂。 Bob Riemersma has a better way in one line,使用Shell object,如下所示。 编辑下面的Bob评论解释了为什么最好使用后期绑定而不是早期绑定。
Const ssfCOMMONAPPDATA = &H23
Const ssfLOCALAPPDATA = &H1c
Const ssfAPPDATA = &H1a
Dim strAppData As String
strAppData = _
CreateObject("Shell.Application").NameSpace(ssfAPPDATA).Self.Path
在我看来,这些目录中的continue to use INI files很好。
答案 1 :(得分:7)
答案 2 :(得分:1)
也许您只是将设置保存在Windows注册表中? 这很容易。使用SaveSeting和GetSetting比创建INI文件容易得多。 兼容性方面没有问题,从WinNT到Windows 8。