C# XML 父子更新无法保存

C# XML Father-Son update can not save

我正在尝试更新现有的应用程序。 之前我被要求简单地清除一个 xml 文件中的转义字符,这些字符会在我们被拉到公司系统之前传给我们。这样做让我们可以选择避免在 7 年前编写的应用程序中编写并且运行良好(但零文档)

它实际上与

配合使用效果很好
foreach (string d in Directory.GetFiles(test, "*.xml", SearchOption.AllDirectories))
{
    String[] lines = File.ReadAllLines(d);
    for (int i = 0; i < lines.Length; i++)
    {
        if (lines[i].Contains("&amp;"))
        {
            i++;
        }
        //Replace incorrect characters
        else if (lines[i].Contains("&"))
        {
            log.Info(saveName);
            log.Error("Incorrect '&' Detected: Changing to '&amp;'");
            lines[i] = lines[i].Replace("&", "&amp;");
            log.Info(lines[i]);
        }

    }
    System.IO.File.WriteAllLines(d, lines);
}

也许太容易了,因为我被要求尝试将其与主应用程序集成,以防止操作员不得不进行预清洁。

我知道(我相信)我在下面的代码中缺少相应的 System.IO.File.WriteAllLines(d, lines); 但我无法让它或其他任何东西工作。 "replace" 正在工作,因为 WriteLine 正在显示更正的行,但我无法让系统保留更改。

MemoryStream ms = new MemoryStream();

ms.Position = 0;
List<string> rows = new List<string>();
using (var reader = new StreamReader(ms))
{
    string line;
    var sw = new StreamWriter(ms);
    while ((line = reader.ReadLine()) != null)
    {
        if (line.Contains("&"))
        {
            Console.WriteLine(line);
            line = line.Replace("&", "&amp;");
            sw.Write(line);
            Console.WriteLine(line);
        }
    }

不确定写日志对你有多重要,但似乎你可以使用类似这样的东西来做同样的事情:

string text = File.ReadAllText("test.xml");
text = Regex.Replace(text, "&(?!amp;)", "&amp;"); 
File.WriteAllText("test.xml", text);

它还应该涵盖当一个字符串中有多个 & 符号时的情况(原始代码不会处理它 - 所以如果字符串类似于 '&hello&',它将被处理为 '&hello&' ).

课程是 "when amending a large app, make sure to read it all"。

出于某种原因,最初的开发人员决定回到 zip 文件(接收这些文件的地方)并为 Stream 再次提取整个文件。

改变了它,一切正常,结果 运行 快多了。