ファイルダイアログの上書きの問題は何故起きたのか?

作成:2008年9月30日

吉田誠一のホームページ   >   ソフトウェア工学   >   技術コラム   >   オブジェクト指向

Windowsで、ファイルを開いたり、ファイルに保存したりする時は、いつもおなじみのファイルダイアログを使います。このファイルダイアログは、MFCではCFileDialogというクラスとして提供されており、誰でも使うことができます。

ですが、このファイルダイアログには、不思議な動きをする問題があります。

こうした問題の原因や解決策を考えるのは、ソフトウェア技術者にとって良い頭の体操になります。

目次

  1. 名前を変えて残したはずが、上書きされてしまう問題
  2. この問題の補足情報
  3. ソフトウェア技術者として、この問題を考えてみよう

名前を変えて残したはずが、上書きされてしまう問題

この問題は、ファイルダイアログを使うアプリケーションであれば、何でも起こります。ここでは、メモ帳を使って試してみましょう。

メモ帳で何か文章を書いてから、メニューの「名前を付けて保存」を選ぶと、ファイルダイアログが表示されます。

「名前を付けて保存」を選んだ時の画面

今書いた文章を、「私の日記.txt」という名前で保存したいと思います。ですが、ここには、以前に書いた「私の日記.txt」が置いてあります。そこで、まずはこれを、「古い私の日記.txt」として残しておきましょう。

リストに表示されているファイル名をマウスでクリックすると、ファイル名を書き換えることができます。なお、マウスでクリックした瞬間に、ファイル名を入力する欄には、選択されたファイル名(即ち、「私の日記.txt」)が表示されます。

ファイル名を書き換えた時の画面

次は、今書いた文章を「私の日記.txt」という名前で保存します。ここで、すでにファイル名の欄には、「私の日記.txt」が入力されていますので、そのまま「保存」ボタンを押します。

すると、何故か、次のような警告メッセージが表示されます。

上書き保存を警告するメッセージ

ここで「はい」を選んでしまうと、今書いた文章が、「古い私の日記.txt」というファイルに上書き保存されてしまいます。つまり、せっかく残しておこうと思った以前の日記が、消えてしまいます。

この問題の補足情報

ここでは、ファイル名の欄に自動的に名前が表示されていたので、そのまま「保存」ボタンを押しました。しかし、いったんファイル名の欄をマウスでクリックして、フォーカスを当ててから「保存」ボタンを押しても、やはり問題が起こります。ただ、ファイル名を1文字でも書き換えてから「保存」ボタンを押すと、この問題は起こりません。

ファイル名の欄にフォーカスを当てた時の画面

また、古いファイルの名前を変更した後で、別のフォルダに移動してから「保存」ボタンを押しても、やはり、「古い私の日記.txt」という名前のファイルが保存されてしまいます。ただ、それは移動先のフォルダに保存されるので、古いファイルが上書きされて消えてしまうことはありません。

別のフォルダに移動している時の画面

なお、この問題は、Vistaでは発生しません。Windows XP以前でビルドして、XP以前ではこの問題が起きるアプリケーションを、そのままVistaにコピーして使っても、Vistaでは問題は起こりません。

ソフトウェア技術者として、この問題を考えてみよう

こうした問題の原因や解決策を考えるのは、ソフトウェア技術者にとって良い頭の体操になると思います。

そこで、次のような小テストを作ってみました。

  1. ファイルダイアログがこのような動きをするのは、どのような作りになっていることが原因か、推定しなさい。
  2. このような問題を起こさないためには、ファイルダイアログをどのように作れば良いか、ソフトウェア設計の観点から提案しなさい。

皆さんで考えてみてはいかがでしょうか。

Copyright(C) Seiichi Yoshida ( comet@aerith.net ). All rights reserved.