【问题标题】:Opening c++ program by double clicking associated file. How do I get the file name?通过双击关联文件打开 c++ 程序。如何获取文件名?
【发布时间】:2011-09-09 17:00:41
【问题描述】:

我有一个与 .bin 文件相关联的 c++ 程序,因此每当打开 .bin 文件时,都会使用 myProgram.exe 打开它。

如何获取打开我的程序的关联文件的文件名?

【问题讨论】:

标签: windows file associations arguments


【解决方案1】:

在纯 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,尽管它对于小型玩具程序来说很方便。

干杯,

【讨论】:

  • 谢谢。彻底和乐于助人。我无法让它与 unicode 一起使用,但使用多字节字符集它工作得很好。
  • @user658253:实际上,CommandLineToArgvW 函数仅在 Unicode 版本中可用,如名称末尾的 W 所示。
【解决方案2】:

通过扩展名打开文件的过程由系统注册表中的一组条目控制。最后的步骤之一指定应该执行的命令,通常文件名包含在命令中。检查你的命令行参数,看看是否给出了文件名。

这里描述了这个过程:http://msdn.microsoft.com/en-us/library/cc144175(v=vs.85).aspx

【讨论】:

    【解决方案3】:

    IIRC,它将是传递给您的应用程序的第二个命令行参数。第一个参数将是您的实际程序的名称(可执行文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多