如何在 c# wpf 中一次加载/保存多个文件? [关闭]

Posted

技术标签:

【中文标题】如何在 c# wpf 中一次加载/保存多个文件? [关闭]【英文标题】:How can I load/save multiple files at once in c# wpf? [closed] 【发布时间】:2019-05-20 21:04:28 【问题描述】:

简介

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

问题

目前我只能保存到单个路径,该路径被硬编码到该路径:

System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName) + "\\Saves\\Default"

我考虑过使用SaveFileDialog,这需要我将所有 xml 文件打包成一个大文件,因为似乎无法使用此对话框一次保存多个文件,但我宁愿不要那样做,到目前为止,我经常需要修改某些值,并且在几百行的小型结构化文件中找到它们要容易得多,而不是几千行的大文件。

虽然保存到单个文件似乎是一种常见的做法,如果我查看我的电子游戏的保存文件夹,我想采取不同的方法,如下所示:

所有 SavesFile 都在 MyApplication/Saves/ 中 每个 SaveFile 都是一个文件夹 该文件夹包含保存到多个 xml 文件中的所有字符数据,如上所示 保存对话框允许用户在 MyApplication/Saves/ 中选择现有文件夹或创建新文件夹。 加载对话框显示 MyApplication/Saves/ 中的所有文件夹

问题

我有文学不知道我有什么样的可能性,所以我想知道:

是否有任何预先存在的窗口对话框可以用于我的想法? 如何创建自己的 SaveFileDialog?

【问题讨论】:

为什么不使用FolderBrowserDialog 来选择文件夹? SaveFileDialog 使用起来会很尴尬,因为您会选择一个名称然后忽略它。是的,这是一个“Windows 窗体”对话框,但 SaveFileDialog... @那些反对/搁置它的人。与我交流您建议如何使这个问题更清楚会很有帮助。我花了很多精力来展示我到目前为止所做的事情以及我的问题出在哪里,我还问了一个关于“如何一次在 wpf 中保存/加载多个文件?”的问题,因为 SaveFileDialog 不会让我正确这样做,但到目前为止没有做任何类似的事情,很难更具体。 谷歌条款了解更多详情。我认为整个文件夹浏览是一个错误。您应该使用 localappdata 中的一个或多个文件夹。有一个框架特殊文件夹可以让你找到它在哪里。添加文件夹树公司/应用程序名称/版本。这样用户就不会丢失他们的数据。使用对象的序列化/反序列化来保存和读取数据。在 c# 中处理对象比使用 xml 好得多。序列化非常健壮。对于我们的游戏,我唯一需要更改数据的时候是我从枚举中删除了几个选项。我使用 powershell 批量编辑我所有的 xml 文件。 我重写了我的问题。希望这能让它更清楚一点。 【参考方案1】:

正如 Ron 所建议的,您应该考虑使用 FolderBrowseDialog,它位于 System.Windows.Forms 命名空间中。

假设您有一个TextBox,以及两个名为BtnBrowse 的按钮,用于浏览文件夹,BtnSave 用于保存文件。

看起来像这样:

然后,在Browse按钮中,使用它让用户选择文件夹路径,然后使用保存按钮进行保存。

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));
        
    

【讨论】:

以上是关于如何在 c# wpf 中一次加载/保存多个文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# wpf Frame 实现一次加载多个page

如何通过delphi保存对话框一次保存多个文件

如何在 Firestore 中一次创建/更新多个文档

是否可以在 C# winforms 中一次将文本写入多个文本框?

使用 c# wpf 从资源文件播放声音

如何在 Powershell 中一次替换多个 .txt 文件中的数据?