WxWidgets wxStandardPaths
#include <wx/stdpaths.h>
wxStandardPaths会返回文件系统中的标准位置,应用程序应该使用它以一种可移植的方式找到其数据文件。
需要注意的是,您不能直接创建类wxStandardPaths的对象,而是应该使用wxStandardPaths::Get()方法返回的全局标准路径对象(该对象可以是类wxStandardPaths的派生类,但不一定是该类),并调用所需的方法。Get()方法返回的对象可以通过重载wxAppTraits::GetStandardPaths()方法进行自定义。
在下面方法的描述中,给出了Unix、Windows和macOS系统中的示例返回值,但请注意,这些只是示例,实际值可能不同。例如,在Windows系统中:系统管理员可能会更改标准目录的位置,例如,Windows目录可能命名为“W:\Win2003”而不是默认的“C:\Windows”。
注意,在下面的例子中,字符串 appinfo 可能是仅包含应用程序名称(由 wxApp::GetAppName() 返回),或者是包含供应商名称(由 wxApp::GetVendorName() 返回)和应用程序名称的组合,两者之间用路径分隔符分隔。默认情况下只使用应用程序名称,使用 UseAppInfo() 来更改此设置。
其他占位符应该都是自解释的:字符串username应该被替换为当前登录用户的名称值。而prefix仅在Unix系统中使用,默认值为/usr/local,但可以通过wxStandardPaths::SetInstallPrefix()更改。
该类的方法所返回的目录可能存在也可能不存在。如果它们不存在,则由调用者创建它们,而WXStandardPaths不会执行此操作。
最后要指出的是,这些函数仅适用于标准打包的应用程序。也就是说,在Unix系统中,您应该遵循标准的安装规范;在Mac系统中,您应该按照苹果的指导创建您的应用程序包。再次强调,该类并不能帮助您完成这些操作。
该类是多线程安全的:可以在不同的线程之间并发调用其方法,无需额外的锁定。
Get()
返回指向唯一全局标准路径对象的引用。
GetDataDir()
返回应用程序的全局位置,即非用户特定的数据文件位置。
在Unix系统中,可以通过设置环境变量WX_APPNAME_DATA_DIR来覆盖此函数的默认值。具体地,将WX_APPNAME_DATA_DIR的值设置为要使用的目录(其中APPNAME是wxApp::GetAppName()的大写值)。这样就可以在不安装应用程序的情况下运行应用程序,只需将环境变量设置为源代码目录的位置,即可使应用程序找到所需的文件。在Windows和MacOS系统中,此函数将返回应用程序可执行文件所在的目录。
DontIgnoreAppSubDir()
Windows环境专门用于撤销“IgnoreAppSubDir()”调用所产生的影响的功能。
调用此函数后,程序目录将精确地指向包含主应用程序二进制文件的目录,也就是说,它会撤销任何先前的`IgnoreAppSubDir()`调用(包括通过`IgnoreAppBuildSubDirs()`间接调用的那些),该函数是从类构造函数中调用的。
IgnoreAppBuildSubDirs()
专门用于MSW的函数,用于忽略所有常见的构建目录。
该函数调用 IgnoreAppSubDir() 函数,并使用构建目录的常用值,例如 "debug" 和 "release"。
它是在类构造函数中被调用的,因此默认情况下构建目录总是被忽略。如果您的应用程序不适合这种情况,可以使用DontIgnoreAppSubDir()避免忽略它们。
IgnoreAppSubDir()
专门用于MSW应用程序的自定义目录检测功能。
本类假定数据、插件和其它文件位于程序目录中,该目录包含应用程序二进制文件本身。但有时该二进制文件可能位于主程序目录的子目录中,例如,至少以下常见情况会发生:
- 该程序位于安装目录下的“bin”子目录中。
- 在开发期间,该程序位于包含源代码和数据文件的目录下的“debug”子目录中。
通过调用此函数,您可以指示类删除与指定参数相匹配的最后一个路径组件。请注意,该函数可以多次调用,例如,您可以同时调用 IgnoreAppSubDir("bin") 和 IgnoreAppSubDir("debug") 来处理上述生产和开发情况,但每次调用只会删除最后一个路径组件。最后请注意,参数可以包含通配符,因此您也可以在使用基于 wxWidgets 的输出目录名称时,同时调用 IgnoreAppSubDir("vc*msw*") 来忽略所有构建目录。