2012-06-23 83 views
1

我在哪裏可以存儲文件夾的路徑,可以從C程序中的每個函數/變量訪問?例如,我有一個名爲do_input.exe的可執行文件,路徑爲c:\tests\myprog\bin\do_input.exe, 另一個在C:\tools\degreesToDms.exe等等,我應該如何以及在哪裏存儲這些文件?存儲文件夾的路徑

我將它們作爲字符串存儲在頭文件中,我將其包含在每個項目的文件中,但有人不鼓勵這樣做。他們是對的嗎?

+0

那個人不鼓勵你這樣做的理由是什麼?這些路徑是否會動態變化,還是會始終保持不變? –

+0

如果這些路徑保持不變,則可以在頭文件中定義它們。但是,如果它們頻繁更改,最好使用包含所需文件路徑的固定配置文件。 – Zeta

+0

@Michael Dautermann:他們總是保持不變。但是,如果它們有所不同,你認爲它會有所不同嗎? –

回答

1

我將它們作爲字符串存儲在我包含在每個項目文件中的頭文件中,但有人不鼓勵這樣做。他們是對的嗎?

是的,他們是絕對正確的:在一個文件系統路徑爲編譯代碼安裝特定的字符串「烘烤」是不是一個很好的決定,因爲你必須重新編譯僅僅是改變的一些關鍵文件的位置。這限制了團隊其他成員運行測試的靈活性,並可能阻止您的測試在自動化測試環境中自動運行。

更好的解決方案是將純文本配置文件與密鑰目錄的位置以及讀取該文件並在運行時生成正確位置的函數結合使用。

或者,您可以提供密鑰目錄的位置作爲程序的命令行參數。這樣,運行程序的用戶就可以在不重新編譯的情況下設置正確的位置。

+0

如果我擁有所有的路徑進入我的項目路徑? –

+1

@ A_nto2團隊規模越大,依靠固定地點的願望就越不理想。爲方便起見,您可以設計一個引用目錄相對於exe文件位置的方案,然後您的程序將能夠找到與您的項目路徑相關的所有文件。但是當程序在自動化測試環境中運行時,顯式覆蓋可能仍然是可取的。 – dasblinkenlight

+0

我的意思是,如果我把所有的可執行文件和文件放到一個大文件夾中。他們都留在這個文件夾。所以在這種情況下,我可以使用.h? –

1

如果它們保持不變,那麼在引用路徑的所有各種.c文件中包含的「.h」頭文件中,我看不到任何定義這些路徑的問題。但是每臺計算機上運行的這個東西可能有不同的路徑(「Tests」而不是「test」),所以這是超級風險的編程,如果你在單臺機器或一組機器上運行它,你直接控制。

如果路徑將變化,則需要創建用於這些路徑的存儲場所(例如靜態字符數組,等),然後有方法來允許這些加以取出,並可能動態復位(例如,而不是將輸出文件寫入「results」,可能用戶想要更改內容以將文件寫入「/tmp」)。完全取決於你在你的代碼中做什麼,以及你正在寫的工具將會做什麼。

+0

我不能在.h文件中修改它們,對吧? –

+0

您可以在「'.h'」文件中修改它們,但是它們會被編譯並烘焙到可執行文件中。如果在安裝工具的其他機器上有任何路徑/目錄不同,則可能會遇到問題。 –