我有一个控制台应用程序,它将使用SCCM远程修改1200系统。需要修改的项目之一是一个GUI菜单应用程序,该应用程序由XML驱动,用于显示启动其他应用程序的按钮。我需要更改XML。
更改XML并不是非常困难,但覆盖该文件将是一件轻而易举的事情。我只需将XML包含在控制台应用程序中即可。无论哪种方式,权限都应该是相同的。是否有首选的或推荐的方式,还是仅仅是经销商的选择?
编辑:目标文件是一个大小为10 in的app.config文件。所有目标工作站之间的app.config应该是一致的。我可以访问原始的app.config文件。我可以提前更新文件,并与我的更新应用程序一起发送副本。
发布于 2015-10-03 20:59:15
您将要处理的文件的预期大小是多少?现有的更新更加复杂,没有重要的理由去做,否则替换是一条路。它更容易理解和编写代码,并且作为一个额外的好处,如果您必须担心中断的写,它更容易使其失败安全(因为最坏的情况是您松散了新文件)。
发布于 2015-10-04 12:20:32
您已经有了几个有趣的答案,但是对于您正在讨论的内容--将一个关键配置文件分发给一千多台计算机--您应该遵循原子替换协议。关键是使应用程序无法看到部分完整的配置文件,也不可能在更新过程中交付部分文件。
第三种方式取决于您正在使用的环境。例如,在.NET中,这将是System.IO.File.Replace()方法。
发布于 2015-10-03 21:47:42
如何可靠地更新XML文件或任何其他文档,而不覆盖其中的至少一部分?也许我误解了这个问题,但假设您有以下文件:
<xml>
<menuItems>
<item>Foo</item>
</menuItems>
</xml>并且您希望用Foo覆盖值Foo2。你要怎么做?您必须计算文件的新大小,重新分配文件大小,将"Foo“之后的所有内容移动一个字符,然后在洞中写入新字符2。现在,想象一下在文件中使用几个不同的更新,一些更新比原始内容小,还有一些更新更大。它成为一项非琐碎的任务。出于这个原因,我相信几乎所有将文件写入磁盘的应用程序都可以用内存中编辑的副本替换原始文件。这个应用程序让OS/文件系统担心空间的重新分配。
就性能而言,大多数工作负载不会通过试图覆盖原始文件的片段而得到改善,因为在磁盘级别上,I/O发生在块中。
https://softwareengineering.stackexchange.com/questions/298920
复制相似问题