Открытие программы на С ++ двойным щелчком по связанному файлу. Как я могу получить имя файла? - PullRequest
1 голос
/ 09 сентября 2011

У меня есть программа на С ++, которую я связал с файлами .bin, поэтому при каждом открытии .bin-файла он открывается с помощью myProgram.exe.

Как получить имя файла связанного файлачто открыла моя программа?

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

IIRC, это будет второй параметр командной строки, передаваемый в ваше приложение.Первым параметром будет имя вашей фактической программы (исполняемой).

1 голос
/ 09 сентября 2011

В простом 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, хотя это может быть удобно для небольших игрушечных программ.

Приветствия и hth.,

1 голос
/ 09 сентября 2011

Процесс открытия файла через его расширение контролируется набором записей в системном реестре. Один из последних шагов определяет команду, которая должна быть выполнена, и обычно имя файла включается в команду. Проверьте параметры командной строки, чтобы узнать, задано ли имя файла.

Процесс описан здесь: http://msdn.microsoft.com/en-us/library/cc144175(v=vs.85).aspx

...