Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c wpf中一次加载/保存多个文件? 介绍_C#_Wpf_Save - Fatal编程技术网

C# 如何在c wpf中一次加载/保存多个文件? 介绍

C# 如何在c wpf中一次加载/保存多个文件? 介绍,c#,wpf,save,C#,Wpf,Save,我目前正在为我的纸笔小组开发一个字符表生成器。每个字符存储在多个xml文件中,使用XmlReader和XmlWriter保存和加载这些文件 问题 目前我只能保存到一个路径,该路径已硬编码到此路径: System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName) + "\\Saves\\Default" 我考虑过使用SaveFileDialog,它需要我将所有x

我目前正在为我的纸笔小组开发一个字符表生成器。每个字符存储在多个xml文件中,使用XmlReader和XmlWriter保存和加载这些文件

问题 目前我只能保存到一个路径,该路径已硬编码到此路径:

System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName) + "\\Saves\\Default"
我考虑过使用SaveFileDialog,它需要我将所有xml文件打包成一个大文件,因为使用这个对话框似乎不可能一次保存多个文件,但我不想这样做,因为现在我经常需要修改某些值,而在小文件中查找它们更容易,几百行的结构化文件,而不是一个几千行的大文件

虽然保存到单个文件似乎是常见的做法,但如果我查看视频游戏的“保存”文件夹,我会采取不同的方法,如下所示:

所有存储文件都在MyApplication/Saves中/ 每个保存文件都是一个文件夹 该文件夹包含保存到多个xml文件中的所有字符数据,如上所示 保存对话框允许用户在MyApplication/Saves/中选择现有文件夹或创建新文件夹。 加载对话框显示MyApplication/Saves中的所有文件夹/ 问题 我不知道我有什么可能,所以我想知道:

是否有任何预先存在的windows对话框,我可以用于我的想法? 如何创建我自己的SaveFileDialog?
正如Ron所建议的,您应该考虑使用System.Windows.Forms命名空间中的FolderBrowseDialog

假设您有一个文本框和两个名为BtnBrowse的按钮,用于浏览文件文件夹,BtnSave用于保存文件

看起来像这样:

然后,在浏览按钮中,使用它让用户选择文件夹路径,然后使用保存按钮保存

public partial class MainWindow : Window
{
    FolderBrowserDialog folderBrowserDialog = null;
    List<string> filesToSave = null;

    public MainWindow()
    {
        InitializeComponent();
        folderBrowserDialog = new FolderBrowserDialog();
        filesToSave = new List<string>
        {
            "A.txt",
            "B.txt",
            "C.txt"
        };
    }

    private void BtnBrowse_Click(object sender, RoutedEventArgs e)
    {
        if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            TxtFolderPath.Text = folderBrowserDialog.SelectedPath;
        }
    }

    private void BtnSave_Click(object sender, RoutedEventArgs e)
    {
        foreach (var file in filesToSave)
        {
            var path = Path.Combine(TxtFolderPath.Text, file);
            File.WriteAllText(path, string.Format("Contents of {0}", file));
        }
    }
}

为什么不使用选择文件夹?SaveFileDialog使用起来会很尴尬,因为您会选择一个名称,然后忽略它。是的,这是一个Windows窗体对话框,但SaveFileDialog也是…@那些否决/搁置它的人。如果你能告诉我你建议如何把这个问题弄清楚,那将是很有帮助的。我花了相当多的精力来展示我到目前为止做了什么以及我的问题在哪里,我还问了一个问题,关于如何在wpf中同时保存/加载多个文件?因为SaveFileDialog不允许我正确地这样做,但是到目前为止没有做任何类似的事情,很难更具体。谷歌术语了解更多详细信息。我认为整个文件夹浏览是一个错误。您应该在localappdata中使用一个或多个文件夹。有一个特殊的文件夹框架可以让你找到它的位置。添加文件夹树company/appname/version。这样用户就不会丢失他们的数据。使用对象的序列化/反序列化来保存和读取数据。使用c语言处理对象比使用xml要好得多。序列化是相当健壮的。在我们的游戏中,我唯一需要更改数据的时候就是从枚举中删除了几个选项。我使用powershell批量编辑我所有的xml文件。我重写了我的问题。希望这能让事情变得更清楚一点。