0

C# で XmlTextWriter クラスを使用しようとしていますが、ファイルへの完全なパス (「C:\file.xml」のように) を指定した場合にのみ機能します。相対パス (「file.xml」など) を使用しようとすると、(cs ファイルを含む同じフォルダーに) ファイルが作成されますが、内容は表示されません。プログラムを実行するたびにファイルが更新されるように設定する必要がある VS のプロジェクト ツリーにプロパティはありますか?

役立つコード:

私が行った場合:

XmlTextWriter f = new XmlTextWriter("C:/file.xml", null);

できます。

しかし、プロジェクトに含まれているファイルを使用しようとすると、次のようになります。

XmlTextWriter f = new XmlTextWriter("file.xml", null);

うまくいきません。ファイルは空のままです。

事前に感謝します。

4

2 に答える 2

3

パスを含む有効なファイル名を XMLWriter に提供するのは、ユーザーの責任です。このファイル パスは、相対パスまたは絶対パスにすることができます。問題は、相対パスが、現在のディレクトリが実行時にあるものに対して機能することです。デザイナーでソースを見ると予想されるものではありません。

特に、パスなしでファイル名のみを指定すると、指定した名前のファイルが .exe ファイルのすぐ隣に作成される可能性があります。

于 2009-12-16T18:29:15.333 に答える
0

ライター内部のファイル ストリームがディスクにフラッシュされていないようです。これは、内部ストリームが特定のサイズに達すると自動的に発生しますが、これがいつ発生するか、またはディスクに書き込まれるデータの量に関する保証はないと思います. ライターの使用が完了し、その内容が確実にディスクに書き込まれるようにしたい場合は、ライターでClose()orを呼び出すことをお勧めします。Dispose()

また、以下の提案にも注意してください。

ライターを使用して作成し、XmlWriter.Createそれを using ブロックに配置します。

using (XmlWriter writer = XmlWriter.Create(filename))
{ /* code that uses writer */ }

これにより、必要に応じて渡すことができるので、テキスト ライターの作成がもう少し柔軟にXmlReaderSettingsなります。また、ライターの使用が終了すると、using ブロックが close/dispose 呼び出しを処理します。

ファイルの内容が上書きされるという問題がある場合は、Stream.

using (XmlWriter writer = XmlWriter.Create(File.Open(filename, FileMode.Open))
{ /* code that uses writer */ }

これにより、ファイル名の衝突の処理方法をより細かく制御できます。

于 2009-12-16T18:32:56.790 に答える