Silverlight 4.0からファイルを保存する教科書の例のように見える小さなコードがありますが、機能していないようです。
次のスニペットは、ボタンクリックハンドラーからのものです。
var saveDialog = new SaveFileDialog() { Filter = "All Files(*.*)|*.*" };
if (saveDialog.ShowDialog() == true)
{
using (var stream = saveDialog.OpenFile())
using (var writer = new StreamWriter(stream))
{
writer.WriteLine("Hello, World!");
writer.Flush();
writer.Close();
}
}
私はファイルを多くの異なる場所に保存しようとしましたが、すべて同じ動作です。
- は
SaveFileDialog
正常に動作しているようです。 - は
SaveFileStream
(デバッガーから)正常に動作しているように見えます。 - を呼び出した後、位置15
writer.Flush()
にBaseStream
進みます。 - 例外はスローされません。
- ブロックの実行後、Windowsエクスプローラーを使用してファイルを見つけることができません。
コードは単純すぎて通常の状況では失敗しないように思えます。だからそれは私の質問につながります:私の状況で何が間違っているのですか?保存が正常に完了したように見えるのに、ファイルが見つからないのはなぜですか?セキュリティ設定?コード自体?私は途方に暮れています。
アップデート
私はさらにいくつかのことを試しましたが、それでも運がありません。SaveFileDialog
同じ症状でブラウザー外でアプリケーションを実行し、をクラス変数に昇格させました。アプリケーションはエラーがないように動作しますが、保存場所(Vistaではマイドキュメントフォルダー)にファイルが表示されません。
プロットが厚くなる
デバッガーをステップスルーしていて、さらに奇妙な動作を見つけました。の呼び出し後saveDialog.OpenFile()
、ファイルはターゲットの場所に表示されます。各ステートメントの後に残りますが、への呼び出し後に削除されwriter.Close()
ます。ストリームが閉じたときにファイルが自動的に削除されるのはなぜですか?
よろしくお願いします!