1

ストリームライターを使用してエラーをログに記録しています

それが設計された方法(理由を聞かないでください)は、アプリケーションがメッセージをログに記録する必要があるたびに新しいストリームライターを開くことです。すべてを./Logs/[current-date].txtに出力します。これは通常、「c:\ myappfolder \ logs[current-date].txt」に解決されます。

すべて正常に動作しますが、ファイルを開くダイアログを使用して「C:\ home \ myfolder \ myfile」と言った後、ストリームライターは「c:\ home \ myfolder \ logs[current-date].txt」に書き込もうとします。

私はこの問題の解決策を知っていますが、何が起こっているのか理解できません

4

3 に答える 3

9

現在のディレクトリはプロセス全体の値です。

OpenFileDialog現在のディレクトリを変更しています。

.NETOpenFileDialogクラスを使用している場合は、現在のディレクトリをそのままにしておくようにダイアログに指示するようにRestoreDirectoryプロパティを設定できます(ただし、ドキュメントの記述方法にはスレッドの問題がある可能性があり、これはまだ不適切であると思われますロギングファシリティの場合)。trueRestoreDirectory

于 2008-12-15T19:57:39.380 に答える
3

マイク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から取得。

于 2008-12-15T20:02:17.420 に答える
2

マイクBは絶対に正しいです。

.NETではなくネイティブAPIを使用している場合は、OPENFILENAME構造体でOFN_NOCHANGEDIRオプションを設定する必要があります。ドキュメントには、Windows XPでは機能しないと記載されていますが、これが.NETバージョンに適用されるかどうかはわかりません。

これをどのように修正しても、ファイルダイアログが開くたびに、元のフォルダに戻って開くことに注意してください。たくさんのファイルを開くと、病気よりも治癒が悪い場合があります。プログラムの起動時に現在のディレクトリを取得し、ファイル名の前に追加する方がよい場合があります。

于 2008-12-15T20:08:10.763 に答える