【发布时间】:2012-01-11 00:35:00
【问题描述】:
我目前正在硬编码我的应用程序的路径,如下所示:
const char* OriginCopyFile = "C:\\Program Files (x86)\\i-cut\\i-cut\\Origin_copy.txt";
此应用程序将在 32 和 64 系统中运行。如何检测没有文件名的路径,以便在多个文件中重用它并使其在体系结构之间可移植。
【问题讨论】:
我目前正在硬编码我的应用程序的路径,如下所示:
const char* OriginCopyFile = "C:\\Program Files (x86)\\i-cut\\i-cut\\Origin_copy.txt";
此应用程序将在 32 和 64 系统中运行。如何检测没有文件名的路径,以便在多个文件中重用它并使其在体系结构之间可移植。
【问题讨论】:
您可以使用GetModuleFileName 获取可执行文件的路径,无论它安装在哪里,甚至以后移动。然后您可以PathRemoveFileSpec 删除可执行文件名称(如果您想支持 Windows 2000 之前的版本,则可以使用strchr() 和朋友)。
【讨论】:
SHGetSpecialFolderPath(CSIDL_PROGRAM_FILES) 至少会给出程序文件目录的路径。您必须处理添加路径和文件名的其余部分。
【讨论】:
Program Files 与 Program files (x86)。
您可以为此使用环境变量:
#include <stdio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
char* programFiles = getenv("ProgramFiles(x86)");
if (programFiles==NULL)
{
programFiles = getenv("ProgramFiles");
}
printf(programFiles);
return 0;
}
【讨论】: