【发布时间】:2011-09-09 17:00:41
【问题描述】:
我有一个与 .bin 文件相关联的 c++ 程序,因此每当打开 .bin 文件时,都会使用 myProgram.exe 打开它。
如何获取打开我的程序的关联文件的文件名?
【问题讨论】:
-
一对useful methods,另请参阅其中的链接问题。
标签: windows file associations arguments
我有一个与 .bin 文件相关联的 c++ 程序,因此每当打开 .bin 文件时,都会使用 myProgram.exe 打开它。
如何获取打开我的程序的关联文件的文件名?
【问题讨论】:
标签: windows file associations arguments
在纯 C++ 中,您可以使用 main 的参数:
#include <iostream>
int main( int argc, char* argv[] )
{
using namespace std;
cout << argc << " arguments:" << endl;
for( int i = 0; i < argc; ++i )
{
cout << "[" << argv[i] << "]" << endl;
}
}
但是有一个问题,即 C 和 C++ main 是为 *nix 而设计的,而不是 Windows。神圣的 C++ 标准建议运行时应该提供main UTF-8 编码的参数,但可惜的是,传统的 Windows C++ 编译器不会发生这种情况。所以在 Windows 中,这种方法可能不适用于文件名,例如挪威语、希腊语或俄语字符。
在 Windows 中,对于打算供其他人使用的程序,您可以改为使用(Unicode 版本的)Windows API 函数 GetCommandLine 及其解析器表亲 CommandLineToArgvW 以便将命令行拆分为单独的参数.
或者,通过 Microsoft 的 C 和 C++ 语言实现,您可以使用非标准启动函数 wmain。但是,我不建议这样做。我认为尽可能地遵守 C 和 C++ 的国际标准是一个好主意,当然没有迫切的理由使用 wmain,尽管它对于小型玩具程序来说很方便。
干杯,
【讨论】:
CommandLineToArgvW 函数仅在 Unicode 版本中可用,如名称末尾的 W 所示。
通过扩展名打开文件的过程由系统注册表中的一组条目控制。最后的步骤之一指定应该执行的命令,通常文件名包含在命令中。检查你的命令行参数,看看是否给出了文件名。
这里描述了这个过程:http://msdn.microsoft.com/en-us/library/cc144175(v=vs.85).aspx
【讨论】:
IIRC,它将是传递给您的应用程序的第二个命令行参数。第一个参数将是您的实际程序的名称(可执行文件)。
【讨论】: