从 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 文件中并保存而不覆盖