【发布时间】:2012-01-19 05:57:37
【问题描述】:
我知道当我们使用 StreamWriter 时,顾名思义,就是在其中写入,但事实是在某些时候我有义务删除我的 StreamWriter 的最后一行...
我发现以下代码(在 SO 上)运行良好:
var lines = System.IO.File.ReadAllLines(pluginQmlFileName);
System.IO.File.WriteAllLines(pluginQmlFileName, lines.Take(lines.Length - 1).ToArray());
但问题是我不能在我的 :
中使用它using (StreamWriter sw = new StreamWriter(pluginQmlFileName, true))
{
[...]
}
部分。
有没有办法删除using {} 部分的最后一行,还是我必须保留我的实际代码?
【问题讨论】:
-
你写的怎么样?如果您有某种循环,请不要在最后一次迭代中编写。
-
是的,有一个循环,但事实是,当我写最后一行时,我不知道以后要不要删除它:/解释太长了,但我只能检查在下一个循环中,我必须将其删除... :(
-
那么为什么不使用
List<string>来存储你想写的行,然后在“下一个循环”之后才使用File.WriteAllLines来写这些行呢?从 List 中删除最后一行是微不足道的。 :) -
好吧,我没有正确地解释自己:(我在一个循环中写,但循环在一个函数中,当我再次进入函数时我有时会删除最后一行!(这就是我打开 StreamWriter 的原因使用“true”参数),事实是我只能在 StreamWriter 已经打开时进行测试:/
-
嗯...这是一个可怕的想法:保留最后一行,而不是写它,将它(使用
out或其他)返回给调用者。调用者可以继续将它传递回您的函数,您的函数可以决定是否应该编写它。但老实说,这听起来像是您将业务逻辑(“我应该写吗?”)混合到常规代码(“我该如何写?”)中。试着把这些东西分开。也许在写函数内部循环不是最好的选择?
标签: c# streamwriter