C#XML Father-Son更新无法保存

时间:2015-12-16 17:17:42

标签: c# xml filestream streamreader streamwriter

我正在尝试更新现有应用。 我之前被要求简单地清理一个xml文件,用于转发到我们之前的转义字符,然后再转到公司系统。这样做让我们可以选择避免在7年前编写的应用程序内部编写并且工作正常(但是ZERO文档)

实际上工作正常
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);,但我无法使用它或其他任何工作。 &#34;替换&#34; 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);
        }
    }

2 个答案:

答案 0 :(得分:1)

不确定写日志对你来说有多重要,但似乎你可以使用以下内容做同样的事情:

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

它还应涵盖多于一个的情况。一个字符串中的符号(原始代码不会处理它 - 所以如果刺痛类似于&#39;&amp; hello&amp;&#39;,它将被处理为&#39;&amp; hello&amp;&#39; )。

答案 1 :(得分:0)

课程是“修改大型应用时,请务必全部阅读”。

出于某种原因,原始开发人员决定重新访问zip文件(收到这些文件的地方)并再次为Stream提取整个内容。

更改了它,一切正常,结果运行得更快。