gpt4 book ai didi

c# - streamreader 读取 xml 文件,然后 file.move 移动 xml 文件 - c#

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:42 26 4
gpt4 key购买 nike

使用 Jon Skeet 的代码

static IEnumerable<XElement> SimpleStreamAxis(string inputUrl,
string elementName)
{
using (XmlReader reader = XmlReader.Create(inputUrl))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == elementName)
{
XElement el = XNode.ReadFrom(reader) as XElement;
if (el != null)
{
yield return el;
}
}
}
}
}
}

他在这个帖子上发帖: Jon Skeet's solution

在我读取数据后,我使用 File.Move(currentDest,newDest) 并不断得知该文件当前正在被另一个进程使用。我检查过没有打开文件的编辑器,甚至没有浏览器。另外我得到部分路径找不到

使用中的产量是否不会关闭阅读器?我必须明确关闭它吗?

文件移动代码

File.Move(Path.Combine(InPath, "test.xml"), Path.Combine(OutPath, "test.xml"));

编辑:看起来使用 streamreader 中的 yield 没有关闭文件。谁能证实这一点?

最佳答案

您是否尝试过在退出 using block 之前明确关闭阅读器?

更新
当您使用 yield 时,它实际上不会执行任何操作,直到您枚举 IEnumerable。这就是您遇到文件保持打开状态问题的原因。

请参阅此 SO 问题:yield return statement inside a using() { } block Disposes before executing

您可能必须创建一个 IEnumerable,填充它,关闭流,然后返回 IEnumerable。

关于c# - streamreader 读取 xml 文件,然后 file.move 移动 xml 文件 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com