C#-在设置中存储多个目录并将其加载到列表框中

C#-在设置中存储多个目录并将其加载到列表框中,c#,winforms,listbox,C#,Winforms,Listbox,我目前有一个带有listbox控件的winform,允许用户浏览目录并将其添加到listbox。然后将使用应用程序设置文件保存这些目录位置(作为字符串?),但我不确定如何分隔每个目录字符串。在重新加载表单时,我希望将所有目录作为设置文件中的单个项目加载到列表框中 所以我有两个问题: 在应用程序设置文件中保存多个位置的最有效方法是什么 如何将目录从设置加载到列表框中?(记住,有多个目录) 我的想法是将所有目录存储在一个字符串设置中,并用逗号分隔,但我不确定是否有更有效的方法来执行此操作。您可以这样

我目前有一个带有listbox控件的winform,允许用户浏览目录并将其添加到listbox。然后将使用应用程序设置文件保存这些目录位置(作为字符串?),但我不确定如何分隔每个目录字符串。在重新加载表单时,我希望将所有目录作为设置文件中的单个项目加载到列表框中

所以我有两个问题:

  • 在应用程序设置文件中保存多个位置的最有效方法是什么

  • 如何将目录从设置加载到列表框中?(记住,有多个目录)


  • 我的想法是将所有目录存储在一个字符串设置中,并用逗号分隔,但我不确定是否有更有效的方法来执行此操作。

    您可以这样做,然后在逗号上执行string.Split,并将列表框的源设置为拆分的结果

    string settings = GetFromConfig();
    var items = settings.Split(',');
    listBox1.DataSource = items;
    

    您可以这样做,然后在逗号上执行string.Split,并将列表框的源设置为拆分的结果

    string settings = GetFromConfig();
    var items = settings.Split(',');
    listBox1.DataSource = items;
    
    您可以使用设置文件中的

    进入集合后,您只需将它们放回
    列表中,然后通过
    列表框将项目添加回。items
    属性,特别是
    add
    方法。

    您可以在设置文件中使用

    一旦进入一个集合,您可以将它们放回
    列表中,然后通过
    列表框将项目添加回。items
    属性,特别是
    add
    方法。

    否!!!!永远不要那样做!!!! 逗号可以包含在文件夹名称中,如果使用逗号作为分隔符,则可能会给程序带来许多关键问题

    您可以在windows中的文件夹名称中使用非法字符。
    \/:*?“<>|

    另外,您不能使用
    \
    /
    ,因为路径可能存储为
    c:\\data\\
    并且使用“\”作为分隔符是不好的,而且它们也可能存储为
    c:/data/
    ,所以使用
    /
    是有风险的。我认为使用
    *
    可能是一个好主意,因为它们是非法的,而且不能被使用文件夹路径和串接了一些文件夹路径的字符串中的任何一个都是可读的,可以简单地通过将
    *
    |
    作为分隔符来识别

        String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
        listBox1.Items.AddRange(paths);
    
    其中s是从设置文件中读取的串联文件夹路径字符串。 你也可以使用

            String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
            listBox1.DataSource = paths;
    
    不!!!!永远不要那样做!!!! 逗号可以包含在文件夹名称中,如果使用逗号作为分隔符,则可能会给程序带来许多关键问题

    您可以在windows中的文件夹名称中使用非法字符。
    \/:*?”<>|

    另外,您不能使用
    \
    /
    ,因为路径可能存储为
    c:\\data\\
    ,使用“\”作为分隔符是不好的,而且它们也可能存储为
    c:/data/
    ,所以使用
    /
    是有风险的。我认为使用
    *
    |
    可能是一个好主意,因为它们是非法的,并且它们不能位于文件夹路径的任何位置,并且具有一些连接的文件夹路径的字符串是可读的,可以简单地通过see
    *
    作为分隔符来识别

        String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
        listBox1.Items.AddRange(paths);
    
    其中s是从设置文件中读取的串联文件夹路径字符串。 你也可以使用

            String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
            listBox1.DataSource = paths;
    

    我甚至没有想到,不敢相信我没有想到。谢谢。我都没想到,真不敢相信我没想到。谢谢