C++ 读取从中调用程序的命令

C++ 读取从中调用程序的命令,c++,windows,C++,Windows,如果其他地方已经回答了这个问题,很抱歉,我找不到 我有一个有趣的问题,我有一个编译程序,prog.exe,它读取一个包含配置的文件prog.cfg。如果我双击它打开prog.exe,一切都很好。但是,如果从命令行或批处理文件打开它,首先必须设置目录。例如,如果我的程序位于桌面上的progs文件夹中,并且从桌面运行progs\prog.exe,它不会加载配置,因为它正在桌面上即当前工作目录中查找配置 如果你知道这一点,这是很好的,但这只是用户的另一个障碍。是否有一种方法在C++中回溯到用于启动程序

如果其他地方已经回答了这个问题,很抱歉,我找不到

我有一个有趣的问题,我有一个编译程序,
prog.exe
,它读取一个包含配置的文件
prog.cfg
。如果我双击它打开
prog.exe
,一切都很好。但是,如果从命令行或批处理文件打开它,首先必须设置目录。例如,如果我的程序位于桌面上的
progs
文件夹中,并且从桌面运行
progs\prog.exe
,它不会加载配置,因为它正在桌面上即当前工作目录中查找配置

如果你知道这一点,这是很好的,但这只是用户的另一个障碍。是否有一种方法在C++中回溯到用于启动程序的命令,以推断配置文件是否在当前工作目录中? 或者,我问的问题完全错了吗


非常感谢

如果我理解正确,您总是希望.exe从.exe所在的文件夹中读取.cfg文件吗?对吧?

请尝试
argv[0]


argv[0]
是运行exe时的完整.exe路径,它是主函数的参数。

如果我理解正确,您总是希望.exe从.exe所在的文件夹中读取.cfg文件吗?对吧?

请尝试
argv[0]

argv[0]
是运行exe时的完整.exe路径,它是main函数的一个参数。

您可以使用它来获取可执行文件的路径

请注意,标准的
main
函数的
argv[0]
不保证提供该路径,并且当它提供路径时,也不保证提供路径的编程可用表示形式。

您可以使用它来获取可执行文件的路径


请注意,标准的
main
函数的
argv[0]
不保证提供该路径,并且当它提供路径时,也不保证提供可编程使用的路径表示形式。

当您双击该路径打开它时,当前目录就是包含可执行文件的目录。在批处理文件中,当前目录不必是该文件夹。如果这是您的程序,您应该能够添加逻辑来查找配置文件,而不管当前文件夹是什么。如果不是,您可以在执行Pr.EXE之前将批处理文件设置为当前目录。下面应该有所帮助(可能有人会认为这个问题是对它的一种欺骗):@ DRESCHJM,我知道这是问题,我请求帮助解决它。我刚刚成功地做到了:)当你双击它打开它时,当前目录就是包含可执行文件的目录。在批处理文件中,当前目录不必是该文件夹。如果这是您的程序,您应该能够添加逻辑来查找配置文件,而不管当前文件夹是什么。如果不是,您可以在执行Pr.EXE之前将批处理文件设置为当前目录。下面应该有所帮助(可能有人会认为这个问题是它的一部分):@ DRESCHJM,我知道这是个问题,我请求帮助解决它,我刚刚成功地做到了:它通常不是完整路径。
main
参数是ANSI编码的,因此即使
argv[0]
包含完整路径的表示,它也不一定提供可靠的(可编程使用的)表示。使用
argv[0]
可以使用
wmain
,这是一种常见的Windows扩展。但是,并非所有WIndows编译器都支持wmain。正如前面指出的,它并不总是完整路径。但是,如果使用宽字符版本,它通常是相对于当前目录的有效路径。(但不必如此,因此GetModuleFileName是更好的选择。)它通常不是完整路径。在Windows中,
main
参数是ANSI编码的,因此即使
argv[0]
包含完整路径的表示,它也不一定提供可靠的(编程上可用的)表示。使用
argv[0]
可以使用
wmain
,这是一种常见的Windows扩展。但是,并非所有WIndows编译器都支持wmain。正如前面指出的,它并不总是完整路径。但是,如果使用宽字符版本,它通常是相对于当前目录的有效路径。(但不必如此,因此GetModuleFileName是一个更好的选择。)