加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – Windows应用程序的设计问题,最佳方法?

发布时间:2020-12-16 23:04:29 所属栏目:百科 来源:网络整理
导读:我正在设计一个应用程序,允许您查找某些程序制作的图片(屏幕截图).我将在应用程序本身中提供一些程序的位置以启动用户. 我想知道随着时间的推移我应该如何添加新位置,我的第一个想法就是将其硬编码到应用程序中,但这意味着用户必须重新安装才能使更改生效.
我正在设计一个应用程序,允许您查找某些程序制作的图片(屏幕截图).我将在应用程序本身中提供一些程序的位置以启动用户.

我想知道随着时间的推移我应该如何添加新位置,我的第一个想法就是将其硬编码到应用程序中,但这意味着用户必须重新安装才能使更改生效.

我的第二个想法是使用XML文件来包含所有位置以及其他数据,例如应用程序的名称.这也意味着用户可以根据自己的意愿添加自己的位置,也可以通过互联网分享.

第二个选项似乎是最好的方法,但后来我不得不考虑如何在用户计算机上管理它.理想情况下,我只想要一个.exe而不依赖于任何外部文件,例如XML,但这会让我回到第一点.

是否最好只使用ClickOnce部署在开始菜单中创建一个条目并创建一个包含.exe和文件名的文件夹?

感谢您的反馈,我不想在设计被钉牢之前开始实施应用程序.

解决方法

通常我不会硬编码应用程序中的任何内容.正如你正确指出的那样,这就是一种不灵活的设计.

我通常将此类配置信息存储在Local Application Data文件夹下的XML文件中.

如果您的用户始终(或经常)与互联网连接,您可以考虑在Web服务上存储此类“书签”信息的替代(或其他)功能.

编辑:

这是我多年来用于此类事情的代码片段

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;

namespace JTools.IO.Configuration
{
    public static class ConfigManager<T> where T : new()
    {
        private const string FILENAME = "Config.xml";

        public static T Load()
        {
            return Load(ConfigFile);
        }

        public static T Load(string fileName)
        {
            T ret = default(T);

            try
            {
                // Open file to read the data from

                using (FileStream fs = new FileStream(fileName,FileMode.Open))
                {

                    // Create an XmlSerializer object to perform the deserialization
                    XmlSerializer xs = new XmlSerializer(typeof(T));

                    // Use the XmlSerializer object to deserialize the data from the file
                    ret = (T)xs.Deserialize(fs);
                }
            }
            catch (System.IO.DirectoryNotFoundException)
            {
                throw new Exception("Could not find the data directory '" + fileName + "'");
            }
            catch (System.IO.FileNotFoundException)
            {
                ret = new T();
            }

            return ret;
        }

        public static void Save(T config)
        {
            Save(config,ConfigFile);
        }

        public static void Save(T config,string fileName)
        {
            // Create file to save the data to

            using (FileStream fs = new FileStream(fileName,FileMode.Create))
            {

                // Create an XmlSerializer object to perform the serialization
                XmlSerializer xs = new XmlSerializer(typeof(T));

                // Use the XmlSerializer object to serialize the data to the file
                xs.Serialize(fs,config);
            }
        }

        static private string configFile = null;
        static public string ConfigFile
        {
            get
            {
                if (configFile == null)
                {
                    string appName = typeof(T).FullName;

                    string baseFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                    string jFolder = Path.Combine(baseFolder,"JToolsConfig");
                    string dataPath = Path.Combine(jFolder,appName);

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

                    configFile = Path.Combine(dataPath,FILENAME);
                }

                return configFile;
            }
        }

    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读