0

在我的程序中,我正在检查是否存在 xml 文件。如果该文件不存在,我只需在指定目录中创建它,然后尝试将另一个 xml 的内容复制到新的 xml 文件中。同样,如果文件存在,我将复制另一个文件的内容并覆盖现有文件。当我运行我的应用程序并检查目录时,我想要在 xml 代码之外复制的文件也显示“XML 文档必须具有顶级元素。错误处理资源”。

到目前为止,我已经尝试过: System.IO.File.Copy(sourceFile, targetPath); 用于文件复制。

我的代码块与此类似:

string sourceFile= "C:\\fileIWantToCopy.xml;
string targetpath= "C:\\NeedsFilledWithSourceContents.xml;

if (File.Exists(targetPath) == false) {
    File.Create(targetPath);
    System.IO.File.Copy(sourceFile, targetPath, true);
} else {
    System.IO.File.Copy(sourceFile, targetPath, true);
}

XDoc.Save(String.Format(targetPath));

同样,我只需要一些关于如何将一个 xml 文件的内容复制到另一个新创建的文件的提示,而不会出现“XML 文档必须具有顶级元素。错误处理资源”错误。我的源 xml 文档的第一行是:

< ? xml 版本="1.0" 编码="utf-8" ?>

然后继续进行典型的头部/身体构造。

在将任何内容复制到新文件之前,我是否需要将内容写入新文件?

谢谢

4

1 回答 1

3

使用System.IO文件操作复制现有文件或保存XDocument您在内存中的文件。但是两者都做完全没有意义!

if (File.Exists(sourceFile)) {
    System.IO.File.Copy(sourceFile, targetPath, true);
} else {
    XDocument doc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XComment("This is a test"),
        new XElement("root")
    );
    doc.Save(targetPath);
}

如果你想保存XDocument这个就足够了,不需要提前创建文件。

doc.Save(targetPath);

MSDN上的描述说

XDocument.Save(String)

        将此 XDocument 序列化为文件,覆盖现有文件(如果存在)。

所有节点必须嵌入单个根节点(任何名称都可以)并且至少根节点必须存在

好的

<?xml version="1.0" encoding="utf-8" ?> 
<html>
    <head />
    <body />
</html>

错误(两个根节点)

<?xml version="1.0" encoding="utf-8" ?> 
<head />
<body />

错误(没有根节点)

<?xml version="1.0" encoding="utf-8" ?> 

另外,我看不出它有什么String.Format用,没有额外的参数。

而且我也不喜欢if (File.Exists(targetPath) == false). 更好:if (!File.Exists(targetPath))。更好的是,颠倒条件以获得积极的问题

if (File.Exists(targetPath)) {
    System.IO.File.Copy(sourceFile, targetPath, true);
} else {
    File.Create(targetPath);
    System.IO.File.Copy(sourceFile, targetPath, true);
}
于 2012-06-29T14:26:22.833 回答