2

我想知道如何打开记事本以外的文件......我们的教授给了我们一个例子:

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() 打开文件是不安全的,这是正确的吗?

我自己找到了答案……对于那些好奇的人,这里是答案:

  • 打开文本文件:system(notepad)
  • 打开一个excel文件:system(start excel)
  • 打开word doc文件:system(start winword)
  • 打开 7z 文件:system(start 7zFM)
  • 打开 Visual Studio 文件:system(start devenv)
4

4 回答 4

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" 部分之后添加更多信息(如文件名)来向它传递更多参数,就像您在记事本示例中所做的那样。执行该行时,使用系统命令应该具有等效的行为。

于 2012-11-04T19:15:56.767 回答
2

如果您只针对 Windows 系统,您可以使用 ShellExecuteEx 函数(Win32 API 的一部分)。您只需将文件名传递给它,它就会启动已注册的程序来处理该文件类型(就像您从 Windows 资源管理器中打开文件一样)。MSDN 上提供了文档:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb762154 (v=vs.85).aspx

有一些关于启动应用程序的示例(ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO) MSDN 文章以及互联网上其他地方的更多内容。

于 2012-11-04T19:28:20.740 回答
1

正如其他人提到的那样,系统函数只执行一个 cmd 命令,.. notepad.exe 默认情况下位于系统的路径中,因此它可以直接工作,但例如,如果我想在我的桌面上打开一个 zip 文件,我d 输入类似的东西

"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";
于 2012-11-04T19:31:21.423 回答
0

Ok, firstly - system - is a function that starts a separate process to your program. Much the same as in a command window when you type the command. The command lines you provide will be dependent on the applications you want to launch.

Now, I was wondering if there was a way to open other type of files, such as Microsoft Excel, Microsoft Word, Visual Studio, or 7zip.

Yes I would be pretty shocked if there wasn't a command line parameter you could specify to load a document in these apps at start up. (Ok not shocked, but it is pretty standard)

Does this have anything to do with c++ - not really - you need to look at references for the applications you mention and see what the command lines parameters are for them. Then craft a string and system(...) to your hearts content.

于 2012-11-04T19:19:50.527 回答