我需要读取一个文件并将处理后的数据写入一个或两个文件中。
在这种情况下如何组织Using语句? 这样的东西行吗?
if (condition)
using (var sw2 = StreamWriter(writeFile2))
using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
{
var line = sr.ReadLine();
sw.WriteLine(line);
if (condition)
sw2.WriteLine(line);
}
答案 0 :(得分:2)
没有任何代码是不正确的,因为如果条件为真,那么所有使用都将被视为一条语句。
因此,只有在满足条件的情况下,您才可以读写所有文件。
相反,如果您希望始终读取 readFile 并写入 writeFile ,但仅在条件为true时才写入 writeFile2 ,需要使用适当的括号清楚地表达您的意图
using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
{
var line = sr.ReadLine();
sw.WriteLine(line);
if (condition)
{
using (var sw2 = StreamWriter(writeFile2))
sw2.WriteLine(line);
}
}
答案 1 :(得分:1)
使用块可以处理空值罚款。然后,您可以执行以下操作:
using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
using (var sw2 = condition ? new StreamReader(writeFile2) : null)
{
var line = sr.ReadLine();
sw.WriteLine(line);
sw2?.WriteLine(line);
}
在打开流阅读器之后将sw2移到哪里,以便在读取文件打开失败的情况下不会创建文件,并使用“安全导航操作符” ?.
处理该情况sw2在循环中为null。