Открыть файл для отображения содержимого в C ++ - PullRequest
3 голосов
/ 12 февраля 2012

У меня есть 2 вопроса относительно открытия файлов (любых типов файлов) с использованием C ++.В настоящее время я работаю над программой с графическим интерфейсом и хочу добавить журнал изменений в виде текста.Также я хочу, чтобы меню в моей программе открывало этот файл changelog.txt с помощью текстового редактора по умолчанию, установленного каждым пользователем, или просто помещал его, чтобы открыть этот текстовый файл.Пожалуйста, имейте в виду, что я хочу открыть файл для отображения НЕ в программе для ввода / вывода. Я знаю, что я могу сделать это с помощью

system("notepad.exe filepath.txt");

или открыть их с помощьюпредустановленная программа:

system("filepath.txt");

Проблема в том, что оба они открывают командную строку за блокнотом.Я знаю, что есть другая команда для открытия файлов с помощью Win32 API, которая называется CreateProccess (), но мой компилятор не распознает эту команду (OpenWatcom W32).Итак, вот мои вопросы:

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

2) Как вы определяете в Windows, что текстовый файл находится в текущей папке программы?Я имею в виду, вместо того, чтобы указывать полный путь к файлу, который будет меняться от пользователя к пользователю, есть ли способ «сообщить» программе, что файл всегда находится в текущей папке, в которой находится программа?

Извините залюбые ошибки, если вы хотите каких-либо разъяснений, пожалуйста, дайте мне знать.

1 Ответ

5 голосов
/ 12 февраля 2012

CreateProcess будет неправильной функцией для использования здесь.Это потребует от вас решить, какой процесс запустить.Пользователь может предпочесть использовать текстовый редактор, кроме Блокнота, я знаю, что я делаю!Правильный способ сделать это в Windows - попросить оболочку открыть файл с любой программой, которую пользователь связал с файлом.Функция ShellExecute делает это.

Назовите это так:

ShellExecute(
    MainWindowHandle,
    "open",
    FullyQualifiedTextFileName,
    NULL,
    NULL,
    SW_SHOWNORMAL
);

Вам нужно будет включить заголовочный файл Shellapi.h и ссылку на Shell32Библиотека .lib.Если ваш компилятор не включает эти файлы, и я был бы удивлен, если бы это было так, то вы можете получить их из Platform SDK.Тем не менее, если вы серьезно относитесь к программированию в Windows, вам следует воспользоваться инструментом, который дает вам доступ к Windows API.

Я действительно рекомендую использовать полный путь для такой задачи, как эта.Поскольку ваш текстовый файл находится в том же каталоге, что и исполняемый файл, вам просто нужно присоединить этот каталог к ​​имени вашего текстового файла.Получите полный путь к исполняемому файлу, вызвав GetModuleFileName, передав NULL для параметра hModule.

...