c++ - 我的 win32 程序应该在哪里保存它的文件?

标签 c++ winapi

我们的 win32 应用程序(用 C++ 编写)已经存在了 10 多年,并且在保存文件的位置方面没有更新以遵循“良好做法”。应用程序默认安装在“C:\AppName”文件夹中,并将应用程序生成的文件、配置文件、下载的文件和保存的用户文档保存在该文件夹的子文件夹中。

据推测,如今默认安装在“c:\Program Files\AppName”下是“最佳实践”。但是如果我们这样做,我们应该把其余的文件放在哪里呢?从 Vista 开始,写入程序文件文件夹是有问题的,而且似乎还有一百万个其他地方可以放置不同的文件,我很困惑。

有什么地方的引用吗?


编辑:扩展人们迄今为止提出的问题:


我熟悉 SHGetFolderPath 函数,但是您可以从中获得很多很多选项,但我找不到这样的资源:“这正是每个选项的用途,以及何时可能需要使用它”。

到目前为止,我们已经完成了“所有文件,包括已保存的用户文件,都在一个文件夹下”的操作,并且运行良好 - 但当人们想要将应用程序安装在 Program Files 文件夹下时就不行了。出于某种原因,Vista 所做的虚拟化操作对我们的应用程序不起作用;如果我们无论如何都要做出改变,我们不妨努力以“正确”的方式做事,因为我们不想在 12 个月后再次改变它。


进一步的问题:


我们的应用程序包含一些“示例”文档,我们会不时更新这些文档。如果我们每隔几个月覆盖一次它们,将它们安装到“我的文档”中是否合适?或者我的文档是否被认为对用户来说是完全安全的?

如果我们不能将它们安装到我的文档中,我们应该把它们放在哪里以便用户可以轻松地看到它们?

最佳答案

Presumably, it's "best practices" to default to installing under "c:\Program Files\AppName"

接近,但不完全是。用户可以配置 Program Files 文件夹的名称,甚至可以没有 C: 驱动器。相反,安装到 %ProgramFiles%\AppName 环境变量文件夹。

请注意,您应该假设在安装完成后您只有对该文件夹的读取权限。对于您可能需要写入权限的程序数据文件,请使用 %AppData%\AppName

最后,您确定您的应用是唯一使用该名称的应用吗?如果您不能 100% 确定这一点,您可能还想在其中包含您的公司名称。

您用来检索这些变量的机制会因您的编程平台而异。它通常最终归结为 SHGetFolderPath() Win32 方法,但 Java 或 .Net 等不同平台也可能提供更简单的抽象。

关于c++ - 我的 win32 程序应该在哪里保存它的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579673/

相关文章:

python - 如何使用纯 Python 扩展 API (python3) 包装 C++ 对象?

c++ - ANSI C++ : Differences between delete and delete[]

c++ - DLL 中的 outproc COM 服务器

python - 在 Windows 上以非侵入方式解锁文件

c++ - 自Windows 10 20H1起,多个具有单独线程的窗口停止工作

c++ - 创建没有窗口的应用程序

c++,在二维空间中生成均匀分布的菱形或三角形孔

c++ - 在轮廓中寻找点

c++ - 如何在 Win32 API C++ 中枚举网络适配器并获取它们的 MAC 地址?

c++ - 向字符串中添加一个字符