我想知道如何打开记事本以外的文件...我们的教授给了我们一个例子:
s = "notepad.exe test.txt";
system(s.c_str());
这将打开文件类型“notepad.exe”,文件名为“test.txt”
主要问题:
现在,我想知道是否有办法打开其他类型的文件,例如Microsoft Excel,Microsoft Word,Visual Studio或7zip。
我的尝试在新的cmd.exe中打开了一些内容(因为START关键字):
fileNeededtoBeOpened = "START \"New Microsoft Office Excel Worksheet.xlsx\"";
system(fileNeededtoBeOpened.c_str());
(这段代码与我的原始代码略有不同,我试图从矢量中打开一个文件......)但我真正需要知道的是“notepad.exe”或“START”在那里用于打开不是.txt
的不同文件类型的其他命令另外,旁注,我在互联网上读到使用system()打开文件是不安全的,这是正确的吗?
我自己找到答案......对于那些好奇的人,这里有一个答案:
答案 0 :(得分:5)
我觉得你很困惑。
系统像在命令行上一样执行命令(在开始菜单下键入cmd进入运行提示符以获取该命令)。
因此,当您输入notepad.exe test.txt
时,它会说:
打开系统路径上的程序
notepad.exe
(所以 命令行可以找到它执行该程序),并传递 参数test.txt
到它。
记事本本身决定如何处理test.txt
,在这种情况下,它会打开它。
因此,您可以告诉它运行任何命令(程序/可执行文件)并将任何参数传递给它。如果你的系统路径上有excel,你可以输入excel.exe
从系统命令打开它。否则,找到安装了excel的位置,并使用excel.exe的完整路径引用它,它将正常工作。
例如,在我的计算机上,执行“C:\ Program Files \ Microsoft Office \ Office12 \ EXCEL.EXE”将从命令行打开excel。我可以通过在Excel.exe“部分之后获得更多信息(如文件名)来传递更多参数,就像在记事本示例中所做的那样。在执行该行时,使用系统命令应该具有等效行为。
答案 1 :(得分:2)
如果您只针对Windows系统,则可以使用ShellExecuteEx函数(Win32 API的一部分)。您只需将文件名传递给它,它就会启动注册程序以处理该文件类型(就像您从Windows资源管理器中打开文件一样)。 MSDN上提供了文档: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762154(v=vs.85).aspx
Launching Applications (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO) MSDN文章中有一些例子,互联网上还有很多其他例子。
答案 2 :(得分:1)
正如其他人提到的,系统函数只执行一个cmd命令,默认情况下,notepad.exe在系统的路径中,所以它直接工作 但是对我来说,如果我想在桌面上打开一个zip文件,我会输入类似
的内容"C:\Program Files\7-Zip\7zFM.exe" Desktop\zipfile.zip
当我目前在我的用户目录[默认]或
时"C:\Program Files\7-Zip\7zFM.exe" C:\Users\JiMMaR\Desktop\zipfile.zip
[其中JiMMaR是我在Windows 7上的用户名] 请注意,此特定命令仅适用于Windows,如果您使用的是另一个操作系统,则无法正常工作
尝试做一个
fileNeededtoBeOpened = "\"C:\Program Files\7-Zip\7zFM.exe\" C:\Users\YOUR_USER_NAME\Desktop\zipfile.zip";
并查看是否执行
编辑: 如果你无法逃避这个空间,那么试试这个
fileNeededtoBeOpened = "C:\Program~1\7-Zip\7zFM.exe C:\Users\YOUR_USER_NAME\Desktop\zipfile.zip";
答案 3 :(得分:0)
好的,首先 - system
- 是一个为您的程序启动单独进程的函数。与键入命令时的命令窗口大致相同。您提供的命令行将取决于您要启动的应用程序。
现在,我想知道是否有办法打开其他类型的文件, 例如Microsoft Excel,Microsoft Word,Visual Studio或7zip。
是的,如果您没有指定在启动时在这些应用程序中加载文档的命令行参数,我会非常震惊。 (好吧没有震惊,但它很标准)
这与c ++有什么关系 - 不是真的 - 你需要查看你提到的应用程序的引用,看看命令行的参数是什么。然后制作一个字符串system(...)
到你心中。