【问题标题】:C# XML Father-Son update can not saveC# XML父子更新无法保存
【发布时间】:2016-03-22 22:49:33
【问题描述】:

我正在尝试更新现有应用。 之前有人要求我简单地清理一个用于转义字符的 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);,但我无法得到它或其他任何东西。 “替换”正在工作,因为 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);
        }
    }

【问题讨论】:

  • 您永远不会将MemoryStream 保存到文件中。另外,如果line 有多个&amp; 会怎样?
  • 这是我们所知道的其中之一。这是一个导入的集合列表组,但是客户的供应商的供应商进行了单方面的更改,并且这里的管理层认为让他们删除转义字符的 6 个月的麻烦是不值得的
  • 流稍后被转换为字符串(被保存),但它没有保持 & 到 & 的变化

标签: c# xml filestream streamreader streamwriter


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我明天试试。我可以在其他几个点 TBH 中捕获该日志数据。
【解决方案2】:

课程是“修改大型应用程序时,请务必通读”。

出于某种原因,最初的开发人员决定重新使用 zip 文件(接收这些文件的位置)并再次将整个内容提取到 Stream。

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

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2013-06-06
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多