【问题标题】:C# Saving file location within applicationC#在应用程序中保存文件位置
【发布时间】:2012-10-04 20:52:06
【问题描述】:

我希望用户能够选择程序文件在其 PC 中的位置,并在每次启动我的应用程序时保存该位置,直到他们更改它。我从来没有用 C# 做过这样的事情,我仍然认为自己是 C# 的新手。我考虑过制作一个 Settings.txt 文件或 XML 文件并读取用户保存的行,但我仍然不确定如何存储它。任何帮助或建议将不胜感激。

【问题讨论】:

  • 在线查找有关如何使用 C# 写入文本文件的示例。然后尽最大努力编写代码。如果您仍然卡住,请返回并使用您编写的代码和您遇到的错误编辑此问题。
  • 我同意开始并展示您的想法会很酷。我认为当您开始寻找和发展自己的想法时,您会很快看到可以做些什么。
  • 通常我们会写入注册表或设置文件(.xml、.config 或 roll-your-own)。
  • 谢谢,我来到这里是一个起点,因为我真的不知道从哪里开始。如果我在此过程中失血过多并且无法对我最终得到的结果进行分类,我将对此大发雷霆并回来。

标签: c# .net winforms settings


【解决方案1】:
void Main()
{
    // Settings in a Text File
    string path1 = @"C:\\Dev\\settings.txt";
    string setting1;
    string setting2;
    setting1 = "foo";
    setting2 = "bar";
    SaveSettingsToTextFile(path1, setting1, setting2);
    setting1 = "";
    setting2 = "";
    LoadSettingsFromTextFile(path1, out setting1, out setting2);
    Console.WriteLine(setting1);
    Console.WriteLine(setting2);

    // Settings in an Xml File
    string path2 = @"C:\\Dev\\settings.xml";
    MySettings mySettings = MySettings.Create(path2);
    mySettings.setting1 = "bat";
    mySettings.setting2 = "baz";
    mySettings.Save();  
    mySettings = null;
    mySettings = MySettings.Create(path2);
    Console.WriteLine(mySettings.setting1);
    Console.WriteLine(mySettings.setting2);
}

void SaveSettingsToTextFile(string path, string setting1, string setting2)
{
    var sb = new StringBuilder();
    sb.AppendLine(setting1);
    sb.AppendLine(setting2);
    File.WriteAllText(path, sb.ToString());
}

void LoadSettingsFromTextFile(string path, out string setting1, out string setting2)
{
    var lines = File.ReadLines(path).ToArray();
    setting1 = lines[0];
    setting2 = lines[1];
}

public class MySettings
{
    public string setting1 { get; set; }
    public string setting2 { get; set; }

    static XmlSerializer serializer = new XmlSerializer(typeof(MySettings));

    public static MySettings Create(string savePath)
    {
        MySettings instance;
        if(File.Exists(savePath))
        {
            var xDoc = XDocument.Load(savePath);
            var reader = xDoc.CreateReader();
            instance = (MySettings)serializer.Deserialize(reader);
            reader.Close();
        }
        else
        {
            instance = new MySettings();
        }
        instance.SavePath = savePath;
        return instance;
    }

    public void Save()
    {
        var xDoc = new XDocument();
        var writer = xDoc.CreateWriter();
        serializer.Serialize(writer, this);
        writer.Close();
        File.WriteAllText(this.SavePath, xDoc.ToString());
    }

    [XmlIgnore]
    public string SavePath { get; private set; }
}

输出:

foo
bar
bat
baz

【讨论】:

    【解决方案2】:

    创建自己的文件类型来保存特定数据对我来说听起来不错,开始。

    当您开发程序时,您可能会发现这有点限制,但为了学习,我会从想到的任何解决方案开始,然后您可能会确定哪些部分需要重新设计以提高效率或实用性。

    【讨论】:

    • 谢谢,我来到这里是一个起点,因为我真的不知道从哪里开始。如果我在此过程中失血过多并且无法对我最终得到的结果进行分类,我将对此大发雷霆并回来。
    • 用你的进度更新这个问题并在这里评论我会回复并给我2美分:)
    【解决方案3】:

    为此,最简单的方法可能是使用.NET User Settings

    还有很多其他选项,包括Isolated Storage,甚至使用the Application class 公开的目录或注册表项之一(UserAppDataPath、LocalUserAppDataPath、UserAppDataRegistry,...)

    【讨论】:

      【解决方案4】:

      最简单的做法是将设置文本文件或 xml 文件添加到项目中,并使用您的 C# 代码对其进行更新。这非常简单,所以我不会在这里详细描述如何做到这一点。只需谷歌搜索写入 c# 中的文本文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多