从 xml 文件复制数据并粘贴到同一文件中并使用 FIle.Copy() 覆盖

Posted

技术标签:

【中文标题】从 xml 文件复制数据并粘贴到同一文件中并使用 FIle.Copy() 覆盖【英文标题】:copy the data from xml file and paste in same file and overwrite using FIle.Copy() 【发布时间】:2021-06-03 21:31:51 【问题描述】:

我正在尝试复制一个文件的数据并将其粘贴到同一个文件中,这意味着覆盖它。我了解到使用 file.copy() 覆盖文件数据是不可能的。但是从其中一篇文章中说,如果我使用 File.Copy(Source file, destination file, true) ,则覆盖是可能的。我尝试使用但没有用。如果有人对此有解决方案,那将是很大的帮助。

     public void EditRole(string oldRole, string newRole)
        
          if (File.Exists(roleXMLLoc))
            
                XDocument doc = XDocument.Load(roleXMLLoc);
                var edit = doc.Element("Roles").Elements("Role").Where(x => x.Value == oldRole).SingleOrDefault();
                edit.Value = newRole;
                doc.Save(roleXMLLoc);

                if (File.Exists(userPermissionLoc))
                
                  File.Copy(userPermissionLoc, userPermissionLoc, true); SaveData();
                
          

【问题讨论】:

您不能覆盖打开的文件。最好的办法是写一个临时文件,删除原文件,然后重命名临时文件。 【参考方案1】:

要读取或写入文件,您应该打开一个 Stream (https://docs.microsoft.com/en-us/dotnet/standard/io/)。如果您需要同时读取和写入,那么您应该使用 2 个单独的流来读取和写入 2 个单独的文件。操作系统会保护文件不被第二个流打开,否则你会陷入并发问题:你读取了已经被写入流改变的非实际数据。 逻辑可以是:

    读取文件并关闭读取流。然后打开文件进行写入并执行您需要的操作。 或 打开 fileToRead.xml 的读取流并打开临时 fileToWrite.xml 的写入流。完成后,您可以关闭两个流,删除源文件并重命名新文件。

【讨论】:

是的,我也试过了,但还是不行。但是否有任何其他命令与 File.Copy() 完全一样。

以上是关于从 xml 文件复制数据并粘贴到同一文件中并使用 FIle.Copy() 覆盖的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 将单元格区域导出到新的 .csv 文件中并保存而不覆盖

For循环复制粘贴文件夹并使用增量重命名它

为啥当我将文本从浏览器复制并粘贴到文件时,Vim 会再次缩进每一行?

从 xlsm 复制并粘贴到 csv

从访问表中复制表并粘贴到空白的 Excel 文件中

将数据从一张电子表格复制到另一张电子表格