Windows 7 在哪里放置用于共享文档的文件?

Windows 7 在哪里放置用于共享文档的文件?,windows-7,vb6,windows-xp,Windows 7,Vb6,Windows Xp,我的VB6应用程序正在尝试写入C:\ProgramData\文件夹中的文件。我这样做的原因是让计算机上的用户可以使用我的应用程序在同一个文件上进行写入,我知道ProgramData文件夹可以存储所有用户共享的应用程序数据 所以, C:\Users\[UserName]\AppData\Local C:\Users\[UserName]\AppData\LocalLow C:\Users\[UserName]\AppData\Roaming 这些具有特定用户名的路径不适合我的应用程序 然而,如果

我的VB6应用程序正在尝试写入C:\ProgramData\文件夹中的文件。我这样做的原因是让计算机上的用户可以使用我的应用程序在同一个文件上进行写入,我知道ProgramData文件夹可以存储所有用户共享的应用程序数据

所以,

C:\Users\[UserName]\AppData\Local
C:\Users\[UserName]\AppData\LocalLow
C:\Users\[UserName]\AppData\Roaming
这些具有特定用户名的路径不适合我的应用程序

然而,如果我在Windows7中以标准用户身份运行,我发现我无权在ProgramData文件夹中的文件上写入。
是否有其他方法可以执行此任务?

以下路径对所有用户都可用,即使没有任何特殊权限也可以写入:

C:\Users\Public

您确实应该使用
SHGetSpecialFolderPath()
API

将其放入模块(或表单并将其更改为私有):

然后,您可以使用此处的任何定义调用此
GetSpecialFolder()

这确保了它与所有操作系统兼容。要获得每个define的值,只需在Google上查找或检查Win32 API工具。以下是一组:

Public Const CSIDL_DESKTOP As Long = &H0
Public Const CSIDL_INTERNET As Long = &H1
Public Const CSIDL_PROGRAMS As Long = &H2
Public Const CSIDL_CONTROLS As Long = &H3
Public Const CSIDL_PRINTERS As Long = &H4
Public Const CSIDL_PERSONAL As Long = &H5
Public Const CSIDL_FAVORITES As Long = &H6
Public Const CSIDL_STARTUP As Long = &H7
Public Const CSIDL_RECENT As Long = &H8
Public Const CSIDL_SENDTO As Long = &H9
Public Const CSIDL_BITBUCKET As Long = &HA
Public Const CSIDL_STARTMENU As Long = &HB
Public Const CSIDL_MYDOCUMENTS As Long = &HC
Public Const CSIDL_MYMUSIC As Long = &HD
Public Const CSIDL_MYVIDEO As Long = &HE
Public Const CSIDL_UNUSED1 As Long = &HF '&HF not currently implemented
Public Const CSIDL_DESKTOPDIRECTORY As Long = &H10
Public Const CSIDL_DRIVES As Long = &H11
Public Const CSIDL_NETWORK As Long = &H12
Public Const CSIDL_NETHOOD As Long = &H13
Public Const CSIDL_FONTS As Long = &H14
Public Const CSIDL_TEMPLATES As Long = &H15
Public Const CSIDL_COMMON_STARTMENU As Long = &H16
Public Const CSIDL_COMMON_PROGRAMS As Long = &H17
Public Const CSIDL_COMMON_STARTUP As Long = &H18
Public Const CSIDL_COMMON_DESKTOPDIRECTORY As Long = &H19
Public Const CSIDL_APPDATA As Long = &H1A
Public Const CSIDL_PRINTHOOD As Long = &H1B
Public Const CSIDL_LOCAL_APPDATA As Long = &H1C
Public Const CSIDL_ALTSTARTUP As Long = &H1D
Public Const CSIDL_COMMON_ALTSTARTUP As Long = &H1E
Public Const CSIDL_COMMON_FAVORITES As Long = &H1F
Public Const CSIDL_INTERNET_CACHE As Long = &H20
Public Const CSIDL_COOKIES As Long = &H21
Public Const CSIDL_HISTORY As Long = &H22
Public Const CSIDL_COMMON_APPDATA As Long = &H23
Public Const CSIDL_WINDOWS As Long = &H24
Public Const CSIDL_SYSTEM As Long = &H25
Public Const CSIDL_PROGRAM_FILES As Long = &H26
Public Const CSIDL_MYPICTURES As Long = &H27
Public Const CSIDL_PROFILE As Long = &H28
Public Const CSIDL_SYSTEMX86 As Long = &H29 'RISC only
Public Const CSIDL_PROGRAM_FILESX86 As Long = &H2A 'RISC only
Public Const CSIDL_PROGRAM_FILES_COMMON As Long = &H2B
Public Const CSIDL_PROGRAM_FILES_COMMONX86 As Long = &H2C 'RISC only
Public Const CSIDL_COMMON_TEMPLATES As Long = &H2D
Public Const CSIDL_COMMON_DOCUMENTS As Long = &H2E
Public Const CSIDL_COMMON_ADMINTOOLS As Long = &H2F
Public Const CSIDL_ADMINTOOLS As Long = &H30
Public Const CSIDL_CONNECTIONS As Long = &H31
Public Const CSIDL_COMMON_MUSIC As Long = &H35
Public Const CSIDL_COMMON_PICTURES As Long = &H36
Public Const CSIDL_COMMON_VIDEO As Long = &H37
Public Const CSIDL_RESOURCES As Long = &H38
Public Const CSIDL_RESOURCES_LOCALIZED As Long = &H39
Public Const CSIDL_COMMON_OEM_LINKS As Long = &H3A
Public Const CSIDL_CDBURN_AREA As Long = &H3B
Public Const CSIDL_UNUSED2 As Long = &H3C '&H3C not currently implemented
Public Const CSIDL_COMPUTERSNEARME As Long = &H3D

您可能希望
CSIDL\u APPDATA
CSIDL\u COMMON\u APPDATA

为您的应用程序提供一个配置文件(如.ini),并在配置文件中指定路径。让您的应用程序读取此配置文件并在指定路径中进行文件读取/写入文件夹是否已设置为具有
所有人的权限?“文档”通常是用户将直接与之交互的内容,即通过单击资源管理器等打开它们。程序不应该指定保存这些东西的位置,而是让用户使用对话框导航到所需的文件夹。然后,如果他们想“共享”,他们可以保存到一个可见的共享位置,比如Public,他们D:drive上的某个文件夹,等等。这是不可移植的。实际上,我已经参考了下面的文章()来检索ProgramData路径,但我面临的情况是:作为一个标准用户,我没有在ProgramData文件夹上写入的权限。请尝试:@Mark-您在那里有答案,但您也可以使用WiX以外的其他工具来完成此操作。我也希望他不要把垃圾直接倒进那个文件夹,而是为他的应用程序创建合适的子文件夹。@Bob77-同意。我发现Windows文件夹结构的错误使用太多了,即使在主流应用程序中也是如此。
Public Const CSIDL_DESKTOP As Long = &H0
Public Const CSIDL_INTERNET As Long = &H1
Public Const CSIDL_PROGRAMS As Long = &H2
Public Const CSIDL_CONTROLS As Long = &H3
Public Const CSIDL_PRINTERS As Long = &H4
Public Const CSIDL_PERSONAL As Long = &H5
Public Const CSIDL_FAVORITES As Long = &H6
Public Const CSIDL_STARTUP As Long = &H7
Public Const CSIDL_RECENT As Long = &H8
Public Const CSIDL_SENDTO As Long = &H9
Public Const CSIDL_BITBUCKET As Long = &HA
Public Const CSIDL_STARTMENU As Long = &HB
Public Const CSIDL_MYDOCUMENTS As Long = &HC
Public Const CSIDL_MYMUSIC As Long = &HD
Public Const CSIDL_MYVIDEO As Long = &HE
Public Const CSIDL_UNUSED1 As Long = &HF '&HF not currently implemented
Public Const CSIDL_DESKTOPDIRECTORY As Long = &H10
Public Const CSIDL_DRIVES As Long = &H11
Public Const CSIDL_NETWORK As Long = &H12
Public Const CSIDL_NETHOOD As Long = &H13
Public Const CSIDL_FONTS As Long = &H14
Public Const CSIDL_TEMPLATES As Long = &H15
Public Const CSIDL_COMMON_STARTMENU As Long = &H16
Public Const CSIDL_COMMON_PROGRAMS As Long = &H17
Public Const CSIDL_COMMON_STARTUP As Long = &H18
Public Const CSIDL_COMMON_DESKTOPDIRECTORY As Long = &H19
Public Const CSIDL_APPDATA As Long = &H1A
Public Const CSIDL_PRINTHOOD As Long = &H1B
Public Const CSIDL_LOCAL_APPDATA As Long = &H1C
Public Const CSIDL_ALTSTARTUP As Long = &H1D
Public Const CSIDL_COMMON_ALTSTARTUP As Long = &H1E
Public Const CSIDL_COMMON_FAVORITES As Long = &H1F
Public Const CSIDL_INTERNET_CACHE As Long = &H20
Public Const CSIDL_COOKIES As Long = &H21
Public Const CSIDL_HISTORY As Long = &H22
Public Const CSIDL_COMMON_APPDATA As Long = &H23
Public Const CSIDL_WINDOWS As Long = &H24
Public Const CSIDL_SYSTEM As Long = &H25
Public Const CSIDL_PROGRAM_FILES As Long = &H26
Public Const CSIDL_MYPICTURES As Long = &H27
Public Const CSIDL_PROFILE As Long = &H28
Public Const CSIDL_SYSTEMX86 As Long = &H29 'RISC only
Public Const CSIDL_PROGRAM_FILESX86 As Long = &H2A 'RISC only
Public Const CSIDL_PROGRAM_FILES_COMMON As Long = &H2B
Public Const CSIDL_PROGRAM_FILES_COMMONX86 As Long = &H2C 'RISC only
Public Const CSIDL_COMMON_TEMPLATES As Long = &H2D
Public Const CSIDL_COMMON_DOCUMENTS As Long = &H2E
Public Const CSIDL_COMMON_ADMINTOOLS As Long = &H2F
Public Const CSIDL_ADMINTOOLS As Long = &H30
Public Const CSIDL_CONNECTIONS As Long = &H31
Public Const CSIDL_COMMON_MUSIC As Long = &H35
Public Const CSIDL_COMMON_PICTURES As Long = &H36
Public Const CSIDL_COMMON_VIDEO As Long = &H37
Public Const CSIDL_RESOURCES As Long = &H38
Public Const CSIDL_RESOURCES_LOCALIZED As Long = &H39
Public Const CSIDL_COMMON_OEM_LINKS As Long = &H3A
Public Const CSIDL_CDBURN_AREA As Long = &H3B
Public Const CSIDL_UNUSED2 As Long = &H3C '&H3C not currently implemented
Public Const CSIDL_COMPUTERSNEARME As Long = &H3D