1

XMLファイルの内容を読み取り、それをオブジェクトモデルに解析しています。

オブジェクトモデルの値を変更するときは、次のコードを使用してxmlに保存し直します。

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

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

_document.Save(_fileName);

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

ただし、実際のXMLファイルをロードすると、値は元の状態のままになります。

どうしてこれなの?実際のXMLファイルを新しい値で保存するにはどうすればよいですか?

4

3 に答える 3

2

ほとんどの場合、WindowsVistaで導入されたファイルシステムの仮想化が発生しています。

基本的に、これが意味するのは、ファイルを保存していると思っている場所ではなく、ファイルを保存しているということです。たとえば、に保存していると思うかもしれませんがC:\Program Files\Your App\yourFile.xml、内部で起こっていることは、OSがサイレントにそれをにリダイレクトしているということ%APPDATA%\Your App\yourFile.xmlです。リロードすると、OSはその場所からサイレントにリダイレクトします。

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

于 2012-04-11T11:52:51.220 に答える
1

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

于 2012-04-11T11:57:10.500 に答える
0

ファイルが出力ディレクトリにコピーされ、そこから読み取られていたことがわかりました。そこから期待通りに更新されていることがわかります。

于 2012-04-11T12:50:02.690 に答える