我正在开发一个旧项目,使用#define以这种方式在磁盘上声明路径:
#define APPPATH "c:\\ProgramPath"
#define SEPARATORPATH "\\"
#define DATAPATH "data"
#define CONFILEFILE "config.dat"
并且代码中大约有一千个位置,它们被用作文字字符串连接,如下所示:
std::ifstream f(APPPATH SEPARATORPATH DATAPATH SEPARATORPATH CONFILEFILE, std::ios::binary);
显然,这不是完美的方式。我目前的主要问题是硬编码的APPPATH。我想允许程序从磁盘上的任何目录执行,并将APPPATH替换为可执行位置(Windows上的GetModuleFileName)。
我的问题是,有没有一种方法可以轻松地做到这一点,而无需修改引用宏的千行?因为目前,我能找到的唯一方法是将其更改为在启动时初始化的全局const char *变量,然后手动替换所有行以在宏列表周围添加strcat()。
答案 0 :(得分:0)
在我的情况下,将APPPATH替换为" c:\ ProgramPath"到"。"工作得很好。如果您的目标不是申请路径,则不适用。