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("&"))
{
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);
但我无法让它或其他任何东西工作。
"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("&", "&");
sw.Write(line);
Console.WriteLine(line);
}
}
不确定写日志对你有多重要,但似乎你可以使用类似这样的东西来做同样的事情:
string text = File.ReadAllText("test.xml");
text = Regex.Replace(text, "&(?!amp;)", "&");
File.WriteAllText("test.xml", text);
它还应该涵盖当一个字符串中有多个 & 符号时的情况(原始代码不会处理它 - 所以如果字符串类似于 '&hello&',它将被处理为 '&hello&' ).
课程是 "when amending a large app, make sure to read it all"。
出于某种原因,最初的开发人员决定回到 zip 文件(接收这些文件的地方)并为 Stream 再次提取整个文件。
改变了它,一切正常,结果 运行 快多了。
我正在尝试更新现有的应用程序。 之前我被要求简单地清除一个 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("&"))
{
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);
但我无法让它或其他任何东西工作。
"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("&", "&");
sw.Write(line);
Console.WriteLine(line);
}
}
不确定写日志对你有多重要,但似乎你可以使用类似这样的东西来做同样的事情:
string text = File.ReadAllText("test.xml");
text = Regex.Replace(text, "&(?!amp;)", "&");
File.WriteAllText("test.xml", text);
它还应该涵盖当一个字符串中有多个 & 符号时的情况(原始代码不会处理它 - 所以如果字符串类似于 '&hello&',它将被处理为 '&hello&' ).
课程是 "when amending a large app, make sure to read it all"。
出于某种原因,最初的开发人员决定回到 zip 文件(接收这些文件的地方)并为 Stream 再次提取整个文件。
改变了它,一切正常,结果 运行 快多了。