質問

私はエラーをログに記録するの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では動作しないことを述べています。

どんなにあなたがこの問題を解決する方法、ファイルダイアログが開くたびに、それはあなたの元のフォルダに戻って開くことに注意していません。あなたはたくさんのファイルを開いた場合、治療は病気よりも悪いかもしれません。あなたは、プログラムの起動時に、現在のディレクトリを取得し、あなたのファイル名にそれを先頭に追加したほうが良いかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top