在網上有很多人問到settings文件存放的位置,本人看了一些文章都沒有給出明確的答案,所以讓我們一起來追蹤settings 文件到底存放在什麼位置,它是否存在加密保護。
settings 為設置文件,其功能類似於app.config 文件,但相比app.config settings 結構相對簡單,它只有名稱、類型、范圍、值四個屬性,並且不能更改結構(當然是在一般情況下,如要修改結構可以通過其它的方式)
我們都知道app.config 文件在生成或debug後都會保存在相對的目錄下應用文件名.exe.config(窗口程序)
問題來了,項目中的 pro.settings 編譯後卻找不到對應的文件。
在程序代碼中修改設置的內容。代碼如下:
LoginSet.Default.IsSaveLog = true;
LoginSet.Default.LogName = "testUser";
LoginSet.Default.LogPassWord = "test";
LoginSet.Default.IpAddress = "127.0.0.1";
LoginSet.Default.Save();
LoginSet.Default.IsSaveLog = true;
LoginSet.Default.LogName = "testUser";
LoginSet.Default.LogPassWord = "test";
LoginSet.Default.IpAddress = "127.0.0.1";
LoginSet.Default.Save();
在程序中修改了事先定義的幾個測試值, 關掉程序後,重新啟動設置值確實更改成功,那就表明 settings 是存放在磁盤上的。
開始尋找它的位置->
可以肯定settings文件的存放沒有在執行程序的目錄下,所以估計是保存在系統盤的臨時目錄下。
做一次簡單測試: 將執行程序拷貝一個副本到其它目錄 再執行發現原來的設置值回到了初始狀態,這就表明和應用程序的路徑有關系, 並且副本程序,與原程序的settings 設置文件沒有沖突,可獨立使用。
行蹤發現了,在系統盤的 C:Documents and Settings 目錄下 查找你的執行程序文件名後 發現了這樣一個文件,user.Config
打開文件內容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<Test.LoginSet>
<setting name="IsSaveLog" serializeAs="String">
<value>True</value>
</setting>
<setting name="LogName" serializeAs="String">
<value>testName</value>
</setting>
<setting name="LogPassWord" serializeAs="String">
<value>apace</value>
</setting>
<setting name="IpAddress" serializeAs="String">
<value>127.0.0.1</value>
</setting>
</Test.LoginSet>
</userSettings>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<Test.LoginSet>
<setting name="IsSaveLog" serializeAs="String">
<value>True</value>
</setting>
<setting name="LogName" serializeAs="String">
<value>testName</value>
</setting>
<setting name="LogPassWord" serializeAs="String">
<value>apace</value>
</setting>
<setting name="IpAddress" serializeAs="String">
<value>127.0.0.1</value>
</setting>
</Test.LoginSet>
</userSettings>
</configuration>
找到了這正是我們需要查找的文件。
總結: 該文件的發現 得到一個結論,.Net 程序運行時都會拷貝一個副本到當前用戶的臨時目錄下,零時目錄名是不確定的,但前部分可以確定,本人默認目錄是:C:Documents and SettingsAdministratorLocal SettingsApplication Data????\test.exe_Url_hgfoy0r3bz1vyaqbme2dl1uefmet0wso1.0.0.0
C:Documents and SettingsAdministratorLocal SettingsApplication Data 這個是固定的,但會根據 不同用戶 Administrator有所變化
???? 是本人的系統版本
test.exe 應用程序名
Url_hgfoy0r3bz1vyaqbme2dl1uefmet0wso 這串代碼是根據你應用程序生成的MD5碼值
1.0.0.0 為程序版本號