2012-02-17 5 views
9

私は、基本的なXMLファイルを作成し、保存し、簡単なC#の機能を持っている:常にXmlDocumentの保存はファイル続けるオープン

private void CreateXMlFile(string Filename, string Name, string Company) 
     { 
      XmlDocument doc = new XmlDocument(); 
      XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
      doc.AppendChild(docNode); 

      XmlNode licenseNode = doc.CreateElement("license"); 
      doc.AppendChild(licenseNode); 

      XmlNode node = doc.CreateElement("Name"); 
      node.AppendChild(doc.CreateTextNode(Name)); 
      licenseNode.AppendChild(node); 

      node = doc.CreateElement("Company"); 
      node.AppendChild(doc.CreateTextNode(Company)); 
      licenseNode.AppendChild(node); 


      doc.Save(Filename); 
     } 

私は、私はいつも次のエラーを取得編集したり、ファイルを削除しよう:

The process cannot access the file because it is being used by another process.

XmlDocumentはどのようなinbuiltの処理ルーチンやクローズルーチンも持っていませんし、後で編集または削除する前にファイルを閉じるように強制することができますか?

私はのStreamWriterを使用してファイルを保存しようとしています

StreamWriter outStream = System.IO.File.CreateText(outfile); 
      outStream.Write(data); 
      outStream.Close(); 

しかし、このdidntのは同じエラーとの違いを作ります。

あなたのアドバイスは大いに受け入れられます。

ありがとうございました

+0

保存するファイル名を渡すのではなく、ストリーム書き込みのインスタンスで書き込もうとしましたか? – Steve

+0

同じ問題がありましたが、存在していれば私のコードはXMLを最初にロードしていました。ファイルのロックが解除される前に 'XmlReader'オブジェクトを閉じる必要がありました。 –

答えて

1

コードは問題ありません。私は私のマシンでそれをテストし、Save()の後にロックが残っていません。

Unlocker(http://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml)を使用して、実際にロックを保持しているかどうかを確認してください。

.NET Frameworkはどちらを使用していますか? Theresはまた、再生可能でもなかったレポート(http://bytes.com/topic/net/answers/467028-xmldocument-save-does-not-close-file-properly)も含んでいます。

+0

ビジュアルスタジオvshost.exeによってロックされています。私はちょうど.net 3.5と同じ問題にコンパイルしました。 – Belliez

+0

ボタンをクリックして呼び出されたそのメソッドで空のプロジェクトを作成し、そのファイルがロックされているかどうかをクリックして確認できますか? – BlueM

4

ファイル名の代わりにXmlDocumentのSaveメソッドにストリームを送信します。

private static void Main(string[] args) 
    { 
     CreateXMlFile("c:\\test.xml", "testName", "testCompany"); 
    } 

    private static void CreateXMlFile(string Filename, string Name, string Company) 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
     doc.AppendChild(docNode); 

     XmlNode licenseNode = doc.CreateElement("license"); 
     doc.AppendChild(licenseNode); 

     XmlNode node = doc.CreateElement("Name"); 
     node.AppendChild(doc.CreateTextNode(Name)); 
     licenseNode.AppendChild(node); 

     node = doc.CreateElement("Company"); 
     node.AppendChild(doc.CreateTextNode(Company)); 
     licenseNode.AppendChild(node); 
     StreamWriter outStream = System.IO.File.CreateText(Filename); 

     doc.Save(outStream); 
     outStream.Close(); 
    } 

私は上記のコードを実行しようとしましたが、私の最後にはうまくいきます。

+0

これを試しましたが、ファイルを削除すると同じエラーが表示されます。 – Belliez

+0

ファイルの場所を変更できますか? – AshokD

+0

も新しい場所を試しました。私はLivedrive(オンラインバックアップ)を無効にしました。 – Belliez

関連する問題