我有跳過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
是的,但我期望最終處理原始迭代器。 (使用你自己的迭代器方法證明是相當容易的。) –