WinForm修改App.config配置文件功能

WinForm修改App.config配置文件主要是通过System.Configuration.dll里ConfigurationManager类来实现,在功能开发前是需要手动引用该dll文件。

ConfigurationManager 类包括可用来执行以下任务的成员:

?从配置文件中读取一个节。若要访问配置信息,请调用 GetSection 方法。对于某些节,例如 appSettings 和 connectionStrings,请使用 AppSettings 和 ConnectionStrings 类。这些成员执行只读操作,使用配置的单个缓存实例,并且可识别多线程。

?将配置文件作为一个整体进行读取和写入。应用程序能够读写任何级别的配置设置,不管是自己的还是其他应用程序或计算机的,也不管是本地的还是远程的。使用 ConfigurationManager 类提供的方法之一,可打开配置文件,例如 SampleApp.exe.config。这些方法返回一个 Configuration 对象,该对象进而公开您可以用来处理关联配置文件的方法和属性。这些方法执行读取或写入操作,并于每次写入文件时创建配置数据。

?支持配置任务。

下列类型用于支持各种配置任务:

SectionInformation

PropertyInformation

PropertyInformationCollection

ElementInformation

ContextInformation

ConfigurationSectionGroup

ConfigurationSectionGroupCollection

除了处理现有的配置信息外,还可以通过扩展内置的配置类型(如 ConfigurationElement、ConfigurationElementCollection、ConfigurationProperty 和 ConfigurationSection 类),来创建和处理自定义配置元素。有关如何以编程方式扩展内置配置类型的示例,请参见 ConfigurationSection。有关如何扩展内置配置类型(该内置配置类型使用基于特性的模型)的示例,请参见 ConfigurationElement。

对实现者的说明

Configuration 类允许进行编程访问以编辑配置文件。使用 ConfigurationManager 提供的 Open 方法中的一种。这些方法返回一个 Configuration 对象,该对象又提供处理基础配置文件所需的方法和属性。您可以访问这些文件以进行读取或写入。

若要读取配置文件,请使用 GetSection 或 GetSectionGroup 读取配置信息。进行读取的用户或过程必须具有下面的权限:

?在当前配置层次结构级别下对配置文件的读取权限。

?对所有父级配置文件进行读取的权限。

如果应用程序需要对它自己的配置进行只读访问,我们建议使用 GetSection 方法。此方法提供对当前应用程序的缓存配置值的访问,它的性能比 Configuration 类更好。

若要写入配置文件,请使用 Save 方法中的一种。进行写入的用户或进程必须具有下面的权限:

?对配置层次结构中当前级别的配置文件和目录的写入权限。

?对所有配置文件的读取权限。

功能实现功能图

功能实现代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
using System.Security.AccessControl;
using System.IO;

namespace Tools.App
{
    public partial class UpApp : Form
    {
        public string ConnString = ConfigurationManager.AppSettings["ConnString"].ToString().Trim();
        //日志记录路径
        public string LogPath = ConfigurationManager.AppSettings["LogPath"].ToString().Trim();
        //执行时间间隔
        public double Time = double.Parse(ConfigurationManager.AppSettings["Time"].ToString().Trim());
        //生成文件路径
        public string FilePath = ConfigurationManager.AppSettings["FilePath"].ToString().Trim();
        public string BackupPath = ConfigurationManager.AppSettings["BackupPath"].ToString().Trim();
        public UpApp()
        {
            InitializeComponent();
            this.txtConnString.Text = ConnString;
            this.txtFilePath.Text = FilePath;
            this.txtLogPath.Text = LogPath;
            this.txtTime.Text = Time.ToString();
            this.txtBackupPath.Text = BackupPath.ToString();

        }

        private void UpApp_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// Description:
        /// 确认事件
        /// Author  : 付义方
        /// Create Date: 2014-02-09
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {

                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.AppSettings.Settings.Remove("FilePath");
                config.AppSettings.Settings.Remove("LogPath");
                config.AppSettings.Settings.Remove("Time");
                config.AppSettings.Settings.Remove("ConnString");
                config.AppSettings.Settings.Remove("BackupPath");
                string FilePath = this.txtFilePath.Text.Trim();
                string LogPath = this.txtLogPath.Text.Trim();
                string Time = this.txtTime.Text.Trim();
                string ConnString = this.txtConnString.Text.Trim();
                string BackupPath = this.txtBackupPath.Text.Trim();
                config.AppSettings.Settings.Add("FilePath", FilePath);
                config.AppSettings.Settings.Add("Time", Time);
                config.AppSettings.Settings.Add("LogPath", LogPath);
                config.AppSettings.Settings.Add("ConnString", ConnString);
                config.AppSettings.Settings.Add("BackupPath", BackupPath);
                //分配权限
                // MessageBox.Show(config.FilePath.Replace(@"\Tools.App.exe.Config", ""));
                addpathPower(config.FilePath.Replace(@"\Tools.App.exe.Config", ""), "Everyone", "FullControl");

                config.Save();
                ConfigurationManager.RefreshSection("appSettings");
                MessageBox.Show("你修改了配置文件需要重启程序!");
                this.Close();

            }
            catch
            {

                MessageBox.Show("读写配置文件出错,请检查安装目录是否有读写权限。");
            }

        }

        /// <summary>
        /// 为创建的临时文件分配权限
        /// </summary>
        /// <param name="pathname"></param>
        /// <param name="username"></param>
        /// <param name="power"></param>
        /// <remarks>SKY 2007-8-6</remarks>
        public void addpathPower(string pathname, string username, string power)
        {

            DirectoryInfo dirinfo = new DirectoryInfo(pathname);

            if ((dirinfo.Attributes & FileAttributes.ReadOnly) != 0)
            {
                dirinfo.Attributes = FileAttributes.Normal;
            }

            //取得访问控制列表
            DirectorySecurity dirsecurity = dirinfo.GetAccessControl();

            switch (power)
            {
                case "FullControl":
                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
                    break;
                case "ReadOnly":
                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));
                    break;
                case "Write":
                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));
                    break;
                case "Modify":
                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));
                    break;
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            SqlConnection _SqlConnection = new SqlConnection(this.txtConnString.Text.Trim());
            try
            {
                _SqlConnection.Open();
                MessageBox.Show("数据库连接成功!", "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("不能连接数据库,请重新设置!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;

            }
            finally
            {
                _SqlConnection.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string FilePath = this.txtFilePath.Text.Trim();
            string LogPath = this.txtLogPath.Text.Trim();
            string BackupPath = this.txtBackupPath.Text.Trim();
            if (!Directory.Exists(FilePath))
            {
                Directory.CreateDirectory(FilePath);
            }

            if (!Directory.Exists(LogPath))
            {
                Directory.CreateDirectory(LogPath);
            }

            if (!Directory.Exists(BackupPath))
            {
                Directory.CreateDirectory(BackupPath);
            }

            MessageBox.Show("执行成功!", "提示");
        }
    }
}

希望以上分享对初学朋友有些帮助,谢谢!

更多关注付义方技术博客:http://blog.csdn.net/fuyifang

或者直接用手机扫描二维码查看更多博文:

时间: 2024-10-10 14:19:30

WinForm修改App.config配置文件功能的相关文章

【C#】#103 动态修改App.config配置文件

对 C/S模式 下的 App.config 配置文件的AppSetting节点,支持配置信息现改现用,并可以持久保存. 一. 先了解一下如何获取 配置信息里面的内容[获取配置信息推荐使用这个] 1.1 获取方法一:获取之前需要引用命名空间: using System.Configuration; ConfigurationManager.AppSettings["key"] 1.2 获取方法二:使用XML类,直接 Load 配置文件,然后读取 AppSetting节点下的信息[不推荐使

winform 写App.config配置文件——IT轮子系列(八)

前言 在winform项目中,常常需要读app.config文件.如: 1 var version = System.Configuration.ConfigurationManager.AppSettings["version"]; 而"写",以前想当然是这样的: 1 ConfigurationManager.AppSettings.Set("version","1.0.0"); 可这样写并没有成功,不懂什么原因.那时就以为

关于App.config配置文件

今天在做复习的时候,突然发现自己无法读取配置文件中的数据库连接字符串,而且检查了半天也没找出原因,最后求助万能的度娘才得以解决—— 1.App.config配置文件在项目中添加后不要修改名称,否则会出现应用程序找不到该文件的情况,看清楚了,不要改名字~~ 2.常见用途: 我们一般都是用来做数据库访问的,现在有两种比较常见的方式,如下—— (1).key .value方式 例子:配置文件部分: <?xml version="1.0" encoding="utf-8&quo

C#项目 App.config 配置文件不同使用环境配置

问题 部署项目时,常常需要根据不同的环境使用不同的配置文件.例如,在部署网站时可能希望禁用调试选项,并更改连接字符串以使其指向不同的数据库.在创建 Web 项目时,Visual Studio 自动生成了 Web.config.Web.Debug.config.Web.release.config这3个不同的配置文件,并提供了转换工具,用于在部署项目时自动转换配置文件内容.具体可以参考这2篇文章:如何:在部署 Web 应用程序项目时转换 Web.config 和 用于 Web 应用程序项目部署的

.NET之如何获取App.config配置文件中的参数值

首先的添加System.Configuration引用 类文件中必须有 using System.Configuration; App.config添加 向App.config配置文件添加参数 例子: 在这个App.config配置文件中,我添加了4个参数,App.config参数类似HashTable都是键/值对 <?xml version="1.0" encoding="utf-8" ?> <configuration> <appS

Winform後台如何動態修改App.config文件里的內容

以下方法修改的,自己添加的app.config裡面不會顯示出修改的東西. 方法一:通過使用System.Xml.XmlDocument對象的方法進行bin\debug\~.vshost.exe.Config裡面的配置修改.(這種方法在程式下次啟動時才會生效,直到你清除項目重建 或是重新手動修改才會恢復為你自己寫的配置信息) public static void SetValue(string AppKey, string AppValue)        {            System.

C# WinForm中 App.config 文件配置

应用程序配置文件,对于asp.net是 web.config对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本质是一个xml文件,对于配置文件的操作,从.NET 2.0 开始,就非常方便了,提供了 System [.Web] .Configuration 这个管理功能的NameSpace,要使用它,需要添加对 System.configuration.dll的引用. 对于WINFORM程序,使用 System

C# 读写App.config配置文件的方法

一.配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration.我们经常访问的是appSettings,它是由.Net预定义的配置节.我们经常使用的配置文件的架构是客诉下面的形式.先大概有个印象,通过后面的实例会有一个比较清楚的认识.下面的“配置节”可以理解为进行配置一个XML的节点. 常见配置文件模式: <configuration>&l

Winform数据库连接app.config文件配置

1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右健项目—〉添加—〉添加新项—〉添加  应用程序配置文件文件[App.Config]. 2.配置文件如下 <?xml version="1.0" encoding="utf-8" ?><configuration>  <appSettings