c# 遍历目录,在每个目录中找到 XML,如果存在 & 则替换为 & - 保存
c# Looping through directory, finding XML in each directory and, if & present replace with & - Save
我希望 XML 正确写入,但文件是从我们无法控制的第 3 方传来的。 (他们是我们客户的另一家供应商)
考虑到这一点:
他们向我们发送了文件夹和子文件夹的 zip(在每个子文件夹中都会有一个 XML)
他们发送给我们的 XML 用 & 代替了 & (每个 & 都是这样,但不是每个 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);" 中,它显示 & 已更改(至少在内存中)但是当我使用 "System.IO.File" if 仍然填充原始 &。
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 变量
为了节省打字时间,而不是循环,做这样的事情:
lines = lines.Select(x => x.Replace("&", "&")).ToArray();
我希望 XML 正确写入,但文件是从我们无法控制的第 3 方传来的。 (他们是我们客户的另一家供应商)
考虑到这一点: 他们向我们发送了文件夹和子文件夹的 zip(在每个子文件夹中都会有一个 XML) 他们发送给我们的 XML 用 & 代替了 & (每个 & 都是这样,但不是每个 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);" 中,它显示 & 已更改(至少在内存中)但是当我使用 "System.IO.File" if 仍然填充原始 &。
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 变量
为了节省打字时间,而不是循环,做这样的事情:
lines = lines.Select(x => x.Replace("&", "&")).ToArray();