2012-11-04 20 views
2

我想知道如何打開記事本比其他文件打開文件...我們的教授給了我們一個例子:如何在C++(不是記事本等)

s = "notepad.exe test.txt"; 
system(s.c_str()); 

這將打開一個文件類型「Notepad.exe的」和「的test.txt」的文件名

主要問題:

現在,我想知道是否有打開其他類型的文件,如Microsoft Excel,微軟的一種方式Word,Visual Studio或7zip。

我嘗試在新的cmd.exe打開的東西(因爲START關鍵字):

fileNeededtoBeOpened = "START \"New Microsoft Office Excel Worksheet.xlsx\""; 
system(fileNeededtoBeOpened.c_str()); 

(此代碼是從我原來,這裏我想從一個打開文件略有不同矢量...)但我真正需要知道的是不是「notepad.exe」或「START」是否有不同的命令來打開不是.txt的不同文件類型

另外,我在網上讀到使用system()打開文件是不安全的,這是正確的嗎?

我找到了答案由我自己...對於那些誰是好奇,這裏的答案:

  • 打開一個文本文件:系統(記事本)
  • 打開一個Excel文件:系統(啓動Excel)
  • 要打開一個Word文檔文件:系統(啓動WINWORD)
  • 要打開的7z文件:系統(啓動7zFM)
  • 要打開一個Visual Studio文件:系統(啓動devenv的)
+3

你確實閱讀什麼['system'](http://msdn.microsoft.com/en-us/library/277bwbdz%28v=vs.100% 29.aspx)函數呢? –

+0

哇,這與我發現的其他鏈接有很大不同...謝謝。我會開始閱讀... – Omonogo

+0

我仍然不認爲我會找到我要找的東西。 – Omonogo

回答

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「部分,就像你在你的記事本的例子中一樣。使用你的系統命令在執行該行時應該具有equivilent行爲

+0

謝謝:)我會蜂擁而至。 – Omonogo

+0

是的,正如我想的那樣 - excel.exe不被識別爲內部或外部命令,可操作程序或批處理文件。 – Omonogo

+0

我告訴過你如何執行它,你只需要用可執行文件的完整路徑來執行它,或者在windows中將這個路徑添加到PATH環境變量中,這樣當你嘗試執行命令時,默認情況下會搜索它。兩種方法都很容易。 –

0

好吧,首先 - system - 是一個啓動一個獨立進程到你的程序的函數。同樣在命令窗口中,當你鍵入命令,您提供的命令行將取決於您要啓動的應用程序。

現在,我想知道是否有打開其他類型的方式文件,例如Microsoft Excel,Microsoft Word,Visual Studio或7zip的 。

是的,如果沒有可以指定在啓動時在這些應用程序中加載文檔的命令行參數,我會非常震驚。 (好吧不是很震驚,但它是非常標準的)

這是否與C++有關 - 不是真的 - 您需要查看您提到的應用程序的參考資料,並查看它們的命令行參數。然後製作一個字符串和system(...)到你的心中。

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文章和其他地方的更多例子在互聯網上的其他地方。

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上我的用戶名] 請注意,這個特定的命令工作唯一的窗口,如果你使用的是其他操作系統這是行不通的,因爲它是

嘗試做一個

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"; 
+0

「程序」和「文件」之間的空間使它閱讀命令爲「C:Program」,並忽略命令的其餘部分 – Omonogo

+0

我用另一行編輯解決方案,嘗試一個 – Jimmar

+0

路徑需要用引號包圍......所以路徑應該是:「\」C :\\ Program Files \\ 7-Zip \\ 7zFM \「」 僅因爲字符串中的字符\是一個命令...例如:\ t或\ r ...它也被用於如字符,如「可以在字符串中看到 – Omonogo