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