当前位置:编程学习 > C#/ASP.NET >>

c# 追踪settings文件

在网上有很多人问到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 为程序版本号

    
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,