The*_* K. 3 c++ windows file-io user-interface winapi
关于使用C++打开文件(任何类型的文件),我有两个问题要问.我目前正在开发GUI程序,我想以txt格式添加更改日志.另外,我希望程序中的菜单能够使用每个用户安装的默认文本编辑器打开changelog.txt,或者只是将其打开以打开该文本文件.请记住,我要打开显示的文件不是在程序中输入/ output.I知道我能做到这一点使用
system("notepad.exe filepath.txt");
Run Code Online (Sandbox Code Playgroud)
或者使用预设程序打开它们:
system("filepath.txt");
Run Code Online (Sandbox Code Playgroud)
问题是两者都在记事本后面打开命令行.我知道有另一个命令使用名为CreateProccess()的Win32 API打开文件,但我的编译器无法识别该命令(OpenWatcom W32).所以这是我的问题:
1)是否有其他命令打开文件或是否有办法在使用系统命令时停止打开命令行?
2)如何在Windows中定义文本文件在当前程序文件夹中?我的意思是没有给出整个文件路径,它将从用户更改为用户有没有办法"告诉"程序文件总是在程序所在的当前文件夹中?
对于任何错误我很抱歉,如果您需要任何澄清,请告诉我.
CreateProcess在这里使用会是错误的功能.这将要求您决定运行哪个进程.用户可能更喜欢使用记事本以外的文本编辑器,我知道我这样做!在Windows上执行此操作的正确方法是要求shell使用用户与该文件关联的任何程序打开该文件.该ShellExecute功能可以做到这一点
像这样称呼它:
ShellExecute(
MainWindowHandle,
"open",
FullyQualifiedTextFileName,
NULL,
NULL,
SW_SHOWNORMAL
);
Run Code Online (Sandbox Code Playgroud)
您需要包含Shellapi.h头文件并链接到Shell32.lib库.如果您的编译器不包含这些文件,如果是这种情况我会感到惊讶,那么您可以从Platform SDK获取它们.也就是说,如果你认真对待Windows上的编程,你应该掌握一个工具,让你可以访问Windows API.
我建议您使用完全限定的路径来完成这样的任务.由于您的文本文件与可执行文件位于同一目录中,因此您只需将该目录加入文本文件的名称即可.通过调用获取完整的可执行文件路径的保持GetModuleFileName传递NULL的hModule参数.