2012-02-11 27 views
3

我有兩個問題需要關於使用C++打開文件(任何類型的文件)。我目前正在開發一個GUI程序,我想添加一個txt格式的更新日誌。另外我想在我的程序中使用默認的文本編輯器來打開每個用戶已安裝的changelog.txt,或者直接打開該文本文件。請記住,我要打開顯示文件中的程序輸入/ output.I知道我能做到這一點使用打開文件以顯示C++中的內容

system("notepad.exe filepath.txt"); 

或者與預先設定的程序打開:

system("filepath.txt"); 

問題是,這兩個打開記事本後面的命令行。我知道有另一個命令使用名爲CreateProccess()的Win32 API打開文件,但我的編譯器無法識別該命令(OpenWatcom W32)。 因此,這裏是我的問題:

1)是否有任何其他命令打開文件,或者是有辦法使用系統命令何時停止從打開命令行?

2)如何在Windows中定義文本文件在當前程序文件夾中?我的意思是,不要給出整個文件路徑,這將改變從用戶到用戶有什麼辦法來「告訴」程序該文件總是在當前文件夾中的程序?

我很抱歉有任何錯誤,如果您想澄清請告訴我。

回答

5

CreateProcess將是錯誤的功能在這裏使用。這將需要您決定運行哪個進程。用戶可能更喜歡使用記事本以外的文本編輯器,我知道我是這樣做的!在Windows上執行此操作的正確方法是讓shell使用用戶與該文件關聯的任何程序打開該文件。 ShellExecute函數執行此操作。

這樣稱呼它:

ShellExecute(
    MainWindowHandle, 
    "open", 
    FullyQualifiedTextFileName, 
    NULL, 
    NULL, 
    SW_SHOWNORMAL 
); 

您將需要包括Shellapi.h頭文件,並鏈接到SHELL32.LIB庫。如果您的編譯器不包含這些文件,並且如果出現這種情況,我會感到驚訝,那麼您可以從Platform SDK獲取它們。也就是說,如果你認真對待在Windows上進行編程,你應該掌握一個可以訪問Windows API的工具。

我建議您使用完全合格的路徑來執行此類任務。由於您的文本文件與可執行文件位於同一目錄中,因此您應該簡單地將該目錄加入到文本文件的名稱中。通過調用GetModuleFileName通過NULL獲取hModule參數,獲取可執行文件的完整路徑。

+0

@DadvidHeferman感謝您的即時回覆。這工作。看起來像我的編譯器containts所需的文件。也許你可能知道我的第二個問題的答案呢? – 2012-02-11 20:55:48

+0

最後一段就是這樣。指定文件名時,我總是喜歡明確指出。獲取包含該文件的目錄的完整路徑。加入文件名,你很好。 – 2012-02-11 21:02:56

+0

如果我是正確的GetModuleFileName也會給我ProgramName.exe,所以我必須刪除,我說得對嗎? – 2012-02-11 22:57:21

相關問題