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