Существует ли не-Java, кросс-платформенный способ запустить связанное приложение для определенного типа файла?

На Visual C++ я использую /W4 и /WX (предупреждения обработки как ошибки).

VC также имеет /Wall, но это является несовместимым со стандартными заголовками.

я принимаю решение рассматривать предупреждения как ошибки, потому что это вынуждает меня зафиксировать их. Я фиксирую все предупреждения, даже если это означает добавлять #pragma для игнорирования предупреждения - тот путь, я заявляю явно, что я знаю о предупреждении (таким образом, другие разработчики не пошлют мне по электронной почте об этом).

9
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Я не знаю ни одного кроссплатформенного способа.

В Windows есть команда start , которая запускает соответствующее приложение по умолчанию. (Например, start foo.doc запускает редактор документов Word по умолчанию, запускает http://StackOverflow.Com/ веб-браузер по умолчанию и запускает mailto: mail @ example. com почтовое приложение по умолчанию.)

В OS X есть команда open , которая делает то же самое.

Linux - это просто ядро ​​операционной системы. Ядра ОС ничего не знают о «типах файлов», «MIME-типах», «связанных приложениях» и т. Д. Следовательно, такая вещь просто не может существовать для Linux.

Группа Freedesktop имеет спецификацию для команды xdg-open , которая работает на всех Freedesktop -совместимые графические рабочие столы (будь то Linux, FreeBSD, NetBSD, OpenBSD, DragonflyBSD, OpenSolaris или другие). Однако, очевидно, не гарантируется работа в системах, отличных от Freedesktop, и определенно не гарантируется работа в неграфических системах.

Во всех трех случаях,

11
ответ дан 4 December 2019 в 12:19
поделиться

Поскольку вы заметили, что если вы используете Qt, стоит упомянуть класс QDesktopServices и особенно метод openUrl (QUrl) . Он делает в значительной степени то, что вы описали, на всех платформах, поддерживаемых Qt.

5
ответ дан 4 December 2019 в 12:19
поделиться

В C есть системный вызов, например:

system("main.cpp");

Это откроет файл с помощью редактора по умолчанию (Visual Studio в моем случае). Я не уверен насчет Linux и Mac, вам может понадобиться написать там «open main.cpp» (об этом можно позаботиться с помощью конструкций #ifdef).

1
ответ дан 4 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: