2007年11月27日火曜日

[.NET]カレントディレクトリがかわってしまう?

.NETのアプリケーションは、起動したディレクトリをカレントディレクトリとします。
たとえば、アプリケーションが起動したディレクトリにあるhoge.xmlを読み込む場合、以下のようなコードを実装します。

byte[] buf = null;
using(FileStream fs = new FileStream(@".\test.txt"FileMode.OpenFileAccess.Read)){
    buf = new byte[fs.Length];
    fs.Read(buf0buf.Length);
    fs.Close();
}


このように「.\」を指定または何も指定しなければカレントとなります。
しかし、SaveFileDialogにてファイルを保存すると、勝手にカレントが変わってしまうのです。たとえば何かしらのファイル保存処理でデスクトップにファイルを保存すると、カレントがデスクトップになります。よって「.\」もデスクトップになってしまいます。これは、OpenFileDialogを利用しても同様の現象が起こります。
コレを回避するためには、FileDialog.RestoreDirectoryをtrueにすることで回避でます。

・・・って何でデフォルトでfalseなの?

インタフェースを使う側からすると、普通に考えてカレントが変わらない仕様を想定してしまいます。
この仕様にたどり着くまでに半日費やしました。とほほ。

0 件のコメント: