打开文件以在C ++中显示内容

时间:2012-02-11 20:42:54

标签: c++ windows winapi user-interface file-io

关于使用C ++打开文件(任何类型的文件),我有两个问题要问。我目前正在开发GUI程序,我想以txt格式添加更改日志。另外,我希望程序中的菜单能够使用每个用户安装的默认文本编辑器打开changelog.txt,或者只是将其打开以打开该文本文件。请记住,我想打开文件,在输入/输出程序中显示 NOT 。我知道我可以使用

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

或使用预设程序打开它们:

system("filepath.txt");

问题是两者都在记事本后面打开命令行。我知道有另一个命令使用名为CreateProccess()的Win32 API打开文件,但我的编译器无法识别该命令(OpenWatcom W32)。 所以这是我的问题:

1)是否有其他命令可以打开文件,或者有没有办法在使用 system 命令时停止打开命令行?

2)如何在Windows中定义文本文件在当前程序文件夹中?我的意思是没有给出从用户到用户的整个文件路径,有没有办法“告诉”程序文件总是在程序所在的当前文件夹中?

对于任何错误我很抱歉,如果您需要任何澄清,请告诉我。

1 个答案:

答案 0 :(得分:5)

在这里使用

CreateProcess将是错误的功能。这将要求您决定运行哪个进程。用户可能更喜欢使用记事本以外的文本编辑器,我知道我这样做!在Windows上执行此操作的正确方法是要求shell使用用户与该文件关联的任何程序打开该文件。 ShellExecute函数执行此操作。

这样称呼:

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

您需要包含Shellapi.h头文件并链接到Shell32.lib库。如果您的编译器不包含这些文件,如果是这种情况我会感到惊讶,那么您可以从Platform SDK获取它们。也就是说,如果你认真对待Windows上的编程,你应该掌握一种工具,让你可以访问Windows API。

我建议你为这样的任务使用完全限定的路径。由于您的文本文件与可执行文件位于同一目录中,因此您只需将该目录加入文本文件的名称即可。通过调用NULL传递hModule {{1}}来获取可执行文件的完整路径。