2010-11-25 74 views
14

我被要求更新过去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个问题:

  1. 鉴于所有这些文件夹,我在哪里存储我的设置?
  2. 我假设有一个漂亮的Windows API调用会给我这个文件夹的正确位置。我希望它可以在XP和7上运行。我的假设是否正确?如果是这样,一个链接将不胜感激。
+0

+1但是尽量不要认为它是一个关键的区别。即使在Windows Vista以前的版本中,您也可能不应该写入共享的“Program Files”文件夹。 – 2010-11-25 10:21:03

回答

12

有一些特殊的文件夹,您可以使用,在XP/VISTA/Windows 7中:

  • CSIDL_APPDATA文件夹是一个你可能会最感兴趣的数据存放在这里是提供给漫游用户登录到的任何机器上。这是存储简单配置数据的最佳位置。所有用户都有写入权限(和最后一个)文件夹。请注意,以上文件夹都不是用于用户生成的数据!这将正确属于我的文档层次结构。
  • 编辑:正如Cody Gray在评论中所建议的那样,对于应用程序数据,也会考虑CSIDL_LOCAL_APPDATA,这些应用程序数据对于当前机器始终是本地的,但是以每个用户为基础预留。该文件夹中的数据在漫游的基础上不可用,所以它应该是用户登录到其他计算机时可能不会错过的数据。

我无耻地从Karl Peterson的good article上面解释了上面的解释,为VB6程序员解释了这一点。卡尔也有一个ready-to-use class,这将帮助你找到目录,但恕我直言,他这一次是过于复杂的事情。 Bob Riemersma has a better way in one line,使用Shell object,如下所示。 编辑鲍勃的下面的评论解释了为什么最好使用后期绑定而不是早期绑定

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在这些目录中。

+3

+1`CSIDL_APPDATA`是您应该使用的文件夹。但是,对于不应该与用户漫游的设置,请考虑使用“CSIDL_LOCAL_APPDATA”。 – 2010-11-25 10:22:55

1

也许你只是将​​设置保存在Windows注册表中? 这很容易。使用SaveSeting和GetSetting比创建INI文件要容易得多。 从WinNT到Windows 8的兼容性没有问题。

相关问题