2012-04-11 3 views
1

私はXMLファイルの内容を読み込み、それをオブジェクトモデルに解析しています。私は戻ってそれをXMLに保存するには、次のコードを使用し、その後、オブジェクトモデルで値を変更次回起動時に更新された値が表示されても、XMLファイルが保存されないのはなぜですか?

XElement optionXml = _panelElement.Elements("options").FirstOrDefault(); 

optionXml.SetAttributeValue("arming", value.ToString()); 

_document.Save(_fileName); 

私は、アプリケーションを閉じたときにこれは、私の知る限り、動作しますそれを再起動すると、保存した値が次に表示されるオブジェクトモデルに反映されます。

しかし、実際のXMLファイルを読み込むと、値は元のままです。

これはなぜですか?実際のXMLファイルを新しい値で保存するには何が必要ですか?

+0

保存後にファイルを閉じてI/Oロックを解除していませんか? –

+0

いいえ、私が今見ているように、それを閉じるオプションがないようです。 – DaveDev

+0

close()のファイルをどのようにロードしているかによって異なります。 Fileクラスを使用して読み込んでコンテンツを読み込んでいる場合は、解析するか、XmlDocumentを使用してください。 パスを確認して、開いたときと同じ場所に保存していることを確認しましたか? –

答えて

2

Windows Vistaで導入された可能性が最も高いのはfile system virtualisationです。

基本的には、に保存されていますが、保存していると思われる場所ではありません。たとえば、あなたはC:\Program Files\Your App\yourFile.xmlに保存していると思うかもしれませんが、フードの下で何が起こっているのは、OSが暗黙的にそれを%APPDATA%\Your App\yourFile.xmlにリダイレクトしているということです。あなたがそれをリロードするために行くと、再びOSはその場所から静かにリダイレクトします。

これは、アプリケーションとそのデータをよりよくカプセル化し、損傷が発生する可能性がある場所への不正な書き込みを防止するために設計されたセキュリティ対策です。 %PROGRAMFILES%\Your Appに強制的に保存することはできますが、そのフォルダに適用されているACLを緩和する必要があるか、アプリケーションが実行される特権レベルを引き上げる必要があります。

1

これをコメントとして使用するのか、回答として使用するのかはわかりませんでしたが、潜在的な回答になる可能性があります。データがアプリケーションのインスタンス間で永続化されているため、XMLファイルが保存されているようです。前述のslugsterのようなファイルシステムの仮想化ですが、XMLファイルの間違ったコピーを見ているという単純なことかもしれません。相対パスを使用している場合は、そのファイルが新しい場所にコピーされている可能性があります。私はあなたがそのファイル名のクイックファイル検索を行い、あなたが戻ってくるものを見ることをお勧めします。

0

ファイルが出力ディレクトリにコピーされていることが判明しました。そこから期待どおりに更新されているのがわかります。

関連する問題