我有两个问题要问,关于使用C ++打开文件(任何types的文件)。 我目前正在一个GUI程序,我想添加一个txt格式的更新日志。 另外我想在我的程序中使用每个用户安装的默认文本编辑器打开changelog.txt,或者直接打开该文本文件。 请记住,我想打开文件显示NOT在input/输出程序。我知道我可以做到这一点使用
system("notepad.exe filepath.txt");
或用预设程序打开它们:
system("filepath.txt");
问题是,这两个打开记事本后面的命令行。 我知道有另一个命令来打开文件使用Win32 API调用CreateProccess()但我的编译器不能识别该命令(OpenWatcom W32)。 所以这是我的问题:
1)是否有任何其他命令来打开文件或有没有办法停止使用系统命令时打开命令行?
2)如何在Windows中定义文本文件在当前程序文件夹中? 我的意思是,而不是提供整个文件path,将改变从用户到用户有什么办法来“告诉”程序文件总是在当前文件夹中的程序?
我很抱歉有任何错误,如果你想澄清,请让我知道。
CreateProcess
将是错误的功能在这里使用。 这将需要您决定运行哪个进程。 用户可能更喜欢使用记事本以外的文本编辑器,我知道我是这样做的! 在Windows上执行此操作的正确方法是让shell使用用户与该文件关联的任何程序打开文件。 ShellExecute
函数执行此操作。
像这样调用它:
ShellExecute( MainWindowHandle, "open", FullyQualifiedTextFileName, NULL, NULL, SW_SHOWNORMAL );
您将需要包含Shellapi.h头文件并链接到Shell32.lib库。 如果你的编译器没有包含这些文件,而且如果是这样的话我会感到惊讶,那么你可以从Platform SDK中获得它们。 也就是说,如果你认真对待Windows上的编程,你应该得到一个工具,让你访问Windows API。
我建议您使用完全合格的路径来完成这样的任务。 由于您的文本文件位于与可执行文件相同的目录中,因此您应该简单地将该目录加入到文本文件的名称中。 通过为hmodulee
参数传递NULL
来调用GetmoduleeFileName
来获取可执行文件的完整路径。