私はOpenFileDialogを使用するときに./変更がターゲット
-
21-08-2019 - |
質問
私はエラーをログに記録するのStreamWriterを使用しています。
それは設計されています方法は、(理由を尋ねるいけないしてください)アプリケーションがメッセージをログに記録しなければなら新しいのStreamWriter毎回を開くことです。これは通常、解決./Logs/[current-date].txtにすべてを出力する "C:\ myappfolder \ログ[現在の日付] .txtの"
すべてが正常に動作しますが、私は、言って、オープンファイルダイアログを使用した後、「C:ホーム\ myfolderなどの\ myfileという\」のStreamWriterは「Cに書き込みをしようとします:\ホーム\ myfolderなどの\ログ[現在の日付] .txtの「
私は、この問題の解決策を知っているが、私はちょうど
に何が起こっているか理解しません解決
カレントディレクトリは、プロセス全体の値です。
OpenFileDialog
は、現在のディレクトリを変更されます。
あなたは、.NET OpenFileDialog
クラスを使用している場合は、あなただけでは、現在のディレクトリを残して、ダイアログを伝えるためにRestoreDirectory
するtrue
プロパティを設定することができます(方法はRestoreDirectory
のためのドキュメントが書かれているが、いくつかのスレッドの問題がある可能性があり、そのI)は、ロギングファシリティのため、これはまだ不適切になるかもしれない想像します。
他のヒント
マイク・Bが言ったように、OpenFileDialog
はカレントディレクトリを変更することがあります。 ./
は電流に相対的なものであるので、それはあまりにも変化します。
RestoreDirectory
プロパティは、この動作を変更します。
、むしろこのような何かを行います
OpenFileDialog openFileDialog1 = new OpenFileDialog();
OpenFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;
MSDN のから撮影。
マイク・B には絶対に正しいです。
あなたはむしろ.NETよりネイティブAPIを使用している場合は、OPENFILENAME構造のOFN_NOCHANGEDIRオプションを設定する必要があります。ドキュメントは、それが、これは.NETのバージョンに適用されるかどうかわからない、しかしWindows XPでは動作しないことを述べています。
どんなにあなたがこの問題を解決する方法、ファイルダイアログが開くたびに、それはあなたの元のフォルダに戻って開くことに注意していません。あなたはたくさんのファイルを開いた場合、治療は病気よりも悪いかもしれません。あなたは、プログラムの起動時に、現在のディレクトリを取得し、あなたのファイル名にそれを先頭に追加したほうが良いかもしれません。