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 version = "1.0" encoding = "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>

間違っています (ルートノードが 2 つ)

<?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 に答える