我很乐意正确地写XML,但是文件是从第三方来的,我们无法控制。 (他们是我们客户的另一个供应商)
所以考虑到这一点: 他们向我们发送了一个文件夹和子文件夹的压缩文件(在每个子文件夹中都会有一个XML) 他们发送给我们的XML有&代替& amp(每个&就像这样但不是每个XML都有&); 使用我的代码,我可以(至少在控制台上)循环遍历每个子,找到xml,找到与& (如果有)并将其更改为&
foreach (string d in Directory.GetFiles(targetDirectory, "*.xml", SearchOption.AllDirectories))
{
Console.WriteLine(d);
String[] lines = File.ReadAllLines(d);
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains("&"))
{
string line = lines[i];
line = line.Replace("&", "&");
Console.WriteLine(line);
}
}
}
在最后一个“Console.WriteLine(line);”它表明&amp;更改(至少在内存中),但当我使用“System.IO.File”时,如果仍然填充原始&amp;。
答案 0 :(得分:2)
要节省一些时间输入,而不是那个循环,请执行以下操作:
lines = lines.Select(x => x.Replace("&", "&")).ToArray();
答案 1 :(得分:1)
foreach (string d in Directory.GetFiles(targetDirectory, "*.xml", SearchOption.AllDirectories))
{
String[] lines = File.ReadAllLines(d);
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains("&"))
{
lines[i] = lines[i].Replace("&", "&");
}
}
System.IO.File.WriteAllLines(d, lines);
}
正如Joe在评论中提到的那样,您的原始代码是在文件中的行循环期间写入文件。我还将File.WriteAllLines()中的硬编码文件路径替换为foreach变量