如何使用与其文件扩展名相关联的程序打开文件?

Val*_*ond 17 c++ windows

有一种简单的方法可以通过Windows中的相关程序打开文件吗?(比如在Windows资源管理器中双击它,但使用我的代码自动完成)

例如,在计算机A上,"text.txt"将在wordpad中打开,但在计算机B上,它将由Notepad ++打开,因为用户文件扩展名分配.

我试过ShellExecute

ShellExecute(0, L"open", L"c:\\windows\\notepad.exe" ,L"c:\\outfile.txt" , 0 , SW_SHOW );
Run Code Online (Sandbox Code Playgroud)

这有效,但如果我省略notepad.exe参数奇怪的事情发生(显示随机浏览器).

Mar*_*som 25

您希望使用该文件作为文件参数打开,而不是参数参数.无需指定要使用的程序,ShellExecute将为您查找.

ShellExecute(0, 0, L"c:\\outfile.txt", 0, 0 , SW_SHOW );
Run Code Online (Sandbox Code Playgroud)

通过将动词保留为NULL(0)而不是L"open",您将获得文件类型的真正默认操作 - 通常这是open但并非总是如此.


Seb*_*ach 5

请参阅启动应用程序

ShellExecute(NULL, "open", L"c:\\outfile.txt", NULL, NULL, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,一个好的内存挂钩是认为所有数据文件都可以由 shell 执行。您也可以在命令框中尝试一下,您只需在其中键入文件名,它就会被打开。或者,反过来说,Windows 中的每个文件都可以打开,可执行文件的默认打开操作是执行它们。