我正在開發一個C#Visual Studio應用程序,並使用了一個config.txt文件。但是,當應用程序安裝在另一臺機器上時,如何才能找到config.txt文件路徑,並考慮到用戶將在自定義路徑(C:\ Folder X)上安裝應用程序?查找文件路徑
查找文件路徑
回答
如果配置文件在同一目錄下的可執行文件,你可以使用:
string exePath = Assembly.GetExecutingAssembly().Location;
string configFileName = "config.txt";
string configFilePath = Path.Combine(Path.GetDirectoryName(exePath), configFileName);
編輯:
的GetExecutingAssembly()
應該返回的路徑C:\Program Files\MyAddIn\your_plugin.dll
,因爲它返回調用它的加載程序集的實際路徑。由於事實並非如此,我們可以猜測MS Project實際上是在加載它之前將其複製到本地(也許是臨時)目錄中(....\AppData\Local\Assembly\...
路徑)。
由於我不知道爲什麼和 MS項目是如何做到這一點,來處理你的問題,我認爲最安全的方式是你的外接程序文件夾的位置存儲到上安裝的註冊表。如果您將它作爲MSI發佈,應該很容易讓您的安裝程序添加一個包含您的插件文件位置的註冊表項。如何做到這一點將取決於你如何建立你的MSI:vdproj?維克斯?
然後在您的插件的代碼中,您可以讀入註冊表以獲取您的路徑。
這給了我以下路徑:C:\ Users \ UserName \ AppData \ Local \ Assembly \ dl3 .... \ config.txt。但是該文件是:C:\ Program Files \ Application \ config.txt – yoozz 2012-02-02 13:13:45
@yozcia看起來像您從位於另一個位置的程序集中調用代碼而不是可執行文件本身。嘗試用'GetEntryAssembly'代替'GetExecutingAssembly' – ken2k 2012-02-02 13:17:23
這給了我null錯誤:對象引用未設置爲對象的實例。我的應用程序是MS PROJECT的附件。它的功能是每次打開MS PROJECT時讀取配置文件。問題是,當我在不同的路徑上安裝應用程序時,我找不到路徑了。 – yoozz 2012-02-02 13:36:50
而不是使用文本文件,您可以使用.net設置來存儲此應用程序的設置。
更多信息可以看出here
如果配置文件是在同一文件夾中的應用程序,你可以使用Assembly.GetExecutingAssembly().Location
- 1. 查找文件路徑
- 2. 查找文件路徑
- 3. 路徑變量:查找特定文件的文件夾路徑
- 4. 查找路徑父文件夾
- 5. emacs「查找文件:」默認路徑
- 6. 在drupal中查找文件路徑
- 7. 查找文件自己的路徑
- 8. 使用os.walk查找文件路徑
- 9. Apache - 查找配置文件路徑
- 10. 查找路徑上的文件
- 11. Java - 查找文件的絕對路徑
- 12. 查找VNode的文件系統路徑
- 13. Python的查找文件路徑
- 14. 查找頭文件包含路徑
- 15. 查找路徑
- 16. 查找圖案目錄路徑從文件路徑
- 17. 查找與路徑
- 18. 查找給定路徑的根路徑
- 19. 檢查文件夾路徑
- 20. 如何手動查找android文件的文件路徑?
- 21. 查找文件路徑中的子文件夾
- 22. 查找路徑中的所有文件,除了文件
- 23. python查找文件並將目錄更改爲文件路徑
- 24. 從完整文件路徑查找文件名
- 25. 如何在.conf文件中查找文件路徑?
- 26. 查找文件的完整路徑文件系統
- 27. 查找某些文件的擴展名,獲取路徑,文件複製到路徑,在文本文件中
- 28. 用javascript查找「我的文檔」路徑
- 29. 文件路徑路徑
- 30. 用於查找文件路徑的SQLite查詢
這將取決於你是如何安裝應用程序。請提供更多關於如何安裝應用程序的信息。 – 2012-02-02 12:40:00
大家都假設文件將與可執行文件一起使用,而OP沒有提及任何有關它的信息。 – 2012-02-02 12:42:21
該應用程序打包在一個msi中,並且該文件與msi嚮導中用戶給出的路徑中的其他文件(包括exe文件)一起解壓縮。我需要這個文件的路徑來讀取應用程序執行時的配置。可以修改文件內容以更改應用程序的配置。 – yoozz 2012-02-02 13:09:02