2013-06-21 71 views
1

我想存儲一些持久的應用程序數據,所以我的R-點擊它添加一個設置項目,選擇屬性,然後設置標籤,並手動輸入設置名稱,類型,範圍和價值應用程序設置保存在哪裏?

當我運行代碼,我讀的設置是這樣的:

lastRunTime = My.Settings.LastRunTime

,並將其設置是這樣的:

My.Settings.LastRunTime = lastRunTime

我在哪裏可以看到新的設置?因爲對上帝的愛,我看不到它在更新設置的位置。創建該設置時,app.config具有原始設置值。那我在哪裏可以看到它?

當我運行的代碼,我把它更新它,下一次我運行新的價值仍然存在的應用程序,所以我知道它存儲在某個地方。但是哪裏?

回答

8

.NET必須做一些特別的東西,它給你一個保證另一個程序,恰巧也有一個「LastRuntime」設置覆蓋一個儲存您的程序價值。爲此,它將一個user.config文件存儲在一個很難找回的目錄中。它有一個怪人的名字,像

C:\ Users \用戶名\ AppData \本地\ WindowsFormsApplication1 \ WindowsFormsApplication1._Url_twchbbo4atpsvjpauzkgkvesu5bh2aul \ 1.0.0.0 \ user.config

注意項目名稱是如何組成部分的路徑,這是找回它的一種方法。該名稱中難以描述的部分是散列表,它是根據項目的各種屬性創建的,它們使您的應用程序具有足夠的獨特性,即使名稱匹配也不會與另一個.NET程序發生衝突。像你的產品名稱,公司名稱,exe名稱等等。

注意逆向如何是真實的,改變這樣的屬性會使你失去你的user.config文件。因此,如果「LastRuntime」是某種許可證測量值,那麼使用設置不是最好的想法。

+0

是的,就是那個!找到帶有最新LastRunDate的文件。這解釋了它的存儲位置。你能指出爲什麼它這樣做嗎?我希望它能與本地版本的配置文件一起使用,該文件位於與可執行文件相同的文件夾中,並且不位於用戶文件夾中。 – George

+2

通過將設置的範圍從「用戶」更改爲「應用程序」,您可以獲得「本地版本」。但是這對您的設置不起作用,因爲這不允許您將值存回。 app.exe.config存儲在不能在未經UAC提升的情況下寫入的目錄中。如果你不喜歡這些設置的工作方式,那麼只需要自己做一下,就是保存到AppData文件夾中的一個文件。 –

+0

謝謝。我希望將所有內容都保存在一個文件中。我想我將不得不創建一個本地INI文件來存儲變量並將文件保存在同一個文件夾中。 – George

1

該值存儲在用戶配置文件下的APPDATA文件夾中。對於Windows 7看在C:\用戶\\應用程序數據\漫遊\

會有基於你如何配置的Visual Studio命名的文件夾。由於我的工作副本已在公司註冊,所以默認值是我的公司名稱。由於我在家中的Visual Studio副本已註冊到我自己,所以默認值是我的名字。

AppData的是一個隱藏文件夾,將不會顯示出來,如果你通過Windows資源管理器瀏覽。但是,如果您將其輸入到運行命令中,它將不會打開任何問題。

+0

我找不到文件。有一個公司名稱的文件夾和我一直在工作的其他項目的一些文件夾,但不是當前有問題的項目。我搜索了C:\ Users \ \ AppData \ Roaming \搜索* .config的所有子文件夾,但未找到我的項目配置文件 – George

+0

然後查看「 \ AppData \ Local \」文件夾。 –

1

這取決於這是機器級設置還是用戶級設置。

對於計算機級設置,項目中的app.config文件僅存儲用於開發的原始設置,以便在完成構建應用程序並將其部署到生產或交付給客戶時,該默認值將會在第一次安裝時在那裏。

當你在調試過程中更改數值,你的程序是(默認)在/bin/Debug/文件夾斷項目的根。這裏會有另一個app.config文件,其中包含項目作爲文件名的一部分:project.app.config。這是您保存的設置去的地方。

要記住一個重要的事情是,在默認情況下,您的應用程序部署到一個文件夾中的Program Files目錄,並且也是標準的用戶,默認情況下,沒有到這個位置的寫入權限。這意味着標準用戶不能更改應用程序級別的設置。

對於用戶級設置,會發生類似的過程。但是,有一個重要的區別。而不是與應用程序位於同一文件夾中,而是使用用戶的AppData文件夾。這意味着標準用戶具有寫入權限,並且可以更改設置。但是,這意味着查找您的配置文件有點棘手,因爲您必須防止兩個具有相同名稱的應用程序嘗試將配置文件存儲在同一個文件夾中。

+0

'.config'文件都沒有我保存的數據。當我運行程序時,我讀取LastRunTime變量,記錄它,爲其分配'Now'並保存它。下一次我運行應用程序時,會記錄新值,所以它似乎在保存值,但是在哪裏? – George

0

既然你做了

My.Settings.LastRunTime = lastRunTime 
My.Settings.Save() '-----------------> maybe you forgot this 

我敢肯定,你可以讀取與設置..

lastRunTime = My.Settings.LastRunTime 
+0

我沒有忘記保存。它保存並讀取值就好了。我不知道它保存在哪裏 – George

相關問題