我有跳过n
行代码工作,从使用File.ReadLines
给定的文件y
线,Skip
和Take
组合功能。当我尝试打开由filePath
下一次给定的文件:IEnumerable.Take(0)上File.ReadLines似乎不转让/关闭文件句柄
string[] Lines = File.ReadLines(filePath).Skip(0).Take(0).ToArray();
using (StreamWriter streamWriter = new StreamWriter(filePath))
{
// ...
}
我上“using
”行File in use by another process
例外。
它看起来像是IEnumerable.Take(0)
是罪魁祸首,因为它返回一个空的IEnumerable
而不枚举File.ReadLines()
返回的对象,我相信这不是处理该文件。
我对不对?他们是否应该枚举以避免这种错误?如何正确地做到这一点?
你绝对*。*我的'ToArray'打电话?我希望处理迭代器,它应该适当地工作。你能提供一个[mcve]吗? (我希望你能用'Main'方法显示这一切。) –
是的,正确的,它被调用。记住它不是在File.ReadLines IEnumerable上调用的,而是在Take(0)返回的IEnumerable中 – Titus
是的,但我期望最终处理原始迭代器。 (使用你自己的迭代器方法证明是相当容易的。) –