我正在尝试更新现有应用。 我之前被要求简单地清理一个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("&"))
{
i++;
}
//Replace incorrect characters
else if (lines[i].Contains("&"))
{
log.Info(saveName);
log.Error("Incorrect '&' Detected: Changing to '&'");
lines[i] = lines[i].Replace("&", "&");
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("&", "&");
sw.Write(line);
Console.WriteLine(line);
}
}
答案 0 :(得分:1)
不确定写日志对你来说有多重要,但似乎你可以使用以下内容做同样的事情:
string text = File.ReadAllText("test.xml");
text = Regex.Replace(text, "&(?!amp;)", "&");
File.WriteAllText("test.xml", text);
它还应涵盖多于一个的情况。一个字符串中的符号(原始代码不会处理它 - 所以如果刺痛类似于&#39;&amp; hello&amp;&#39;,它将被处理为&#39;&amp; hello&amp;&#39; )。
答案 1 :(得分:0)
课程是“修改大型应用时,请务必全部阅读”。
出于某种原因,原始开发人员决定重新访问zip文件(收到这些文件的地方)并再次为Stream提取整个内容。
更改了它,一切正常,结果运行得更快。