内部構造>ファイルを開く動作
ファイルを開く動作
ファイルを開く動作には複数の経路があり,ファイルパスや文字コードが決定されるタイミングが少しずつ異なります.
ファイルを開く動作を変更する場合は,これらすべての経路を確認する必要があります.
また,関連するチェック機能の仕様変遷についてもまとめましたので,仕様検討・変更の際に参考にしてください.
ファイルを開くときの通過経路
-
ウィンドウ領域へファイルのD&D(未編集ウィンドウ)
- CEditWnd::OnDropFiles
- CEditDoc::FileRead
-
ウィンドウ領域へファイルのD&D(編集済ウィンドウ)
- CEditWnd::OnDropFiles
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
-
ウィンドウ領域へフォルダのD&D(未編集ウィンドウ)
- CEditWnd::OnDropFiles
- CEditDoc::FileRead
- 開くダイアログ
-
ウィンドウ領域へフォルダのD&D(編集済ウィンドウ)
- CEditWnd::OnDropFiles
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
- 開くダイアログ
-
ファイルメニューの開く(未編集ウィンドウ)
- CEditWnd::OnCommand
- CEditDoc::OpenFile
- 開くダイアログ
- CEditDoc::FileRead
-
ファイルメニューの開く(編集済ウィンドウ)
- CEditWnd::OnCommand
- CEditDoc::OpenFile
- 開くダイアログ
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
-
ファイルメニューの最近使ったファイル(未編集ウィンドウ)
- CEditWnd::OnCommand
- CEditDoc::OpenFile
- CEditDoc::FileRead
-
ファイルメニューの最近使ったファイル(編集済ウィンドウ)
- CEditWnd::OnCommand
- CEditDoc::OpenFile
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
-
ファイルメニューの最近使ったフォルダ(未編集ウィンドウ)
- CEditWnd::OnCommand
- 開くダイアログ
- CEditDoc::OpenFile
- CEditDoc::FileRead
-
ファイルメニューの最近使ったフォルダ(編集済ウィンドウ)
- CEditWnd::OnCommand
- 開くダイアログ
- CEditDoc::OpenFile
- CNormalProcess::Initailize
- CEditWnd::Create
- CEditDoc::FileRead
-
コマンドライン
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
-
タスクトレイから最近使ったファイル
- CEditApp::DicpatchEvent
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
-
タスクトレイから最近使ったフォルダ
- CEditApp::DicpatchEvent
- 開くダイアログ
- CNormalProcess::Initailize
- CEditWnd::Create
- CEditDoc::FileRead
-
タスクトレイから開く
- CEditApp::DispatchEvent
- 開くダイアログ
- CNormalProcess::Initialize
- CEditWnd::Create
- CEditDoc::FileRead
前回と異なる文字コードのとき問い合わせを行う
もともと自動認識には精度の限界があることを救済するために用意された機能だったため,「自動認識結果が前回と異なるときに問い合わせ」するもの思われてきましたが,これは勘違いです.
ファイルが存在する場合と存在しない場合に分けて,動作を確認した結果と変更点などを次に示します.
ファイルが存在する場合
評価条件
UTF-8のファイル&&前回はUnicodeで開いた&&ファイルが存在する&&現在開いていない
比較結果
前から1.5.13.1以前の動作,1.5.14.0~1.5.15.3の動作,1.5.16.0以降の動作,動作内容,の順です.
- 無 / 無 / 無 / ファイルメニューの開くでUnicode指定
- 問 / 無 / 問 / ファイルメニューの開くでUTF-8指定
- 問 / 問 / 問 / ファイルメニューの開くで文字コード指定なし
- 問 / 問 / 無 / ファイルメニューの最近使ったファイル
- 問 / 問 / 無 / ファイルメニューの最近使ったフォルダでUnicode指定
- 問 / 問 / 問 / ファイルメニューの最近使ったフォルダでUTF-8指定
- 問 / 問 / 問 / ファイルメニューの最近使ったフォルダで文字コード指定なし
- 問 / 問 / 問 / ウィンドウ領域へのファイルのD&D
- 無 / 無 / 無 / ウィンドウ領域へのフォルダのD&DでUnicode指定
- 問 / 無 / 問 / ウィンドウ領域へのフォルダのD&DでUTF-8指定
- 問 / 問 / 問 / ウィンドウ領域へのフォルダのD&Dで文字コード指定なし
- 無 / 無 / 無 / コマンドラインでUnicode指定
- 問 / 無 / 問 / コマンドラインでUTF-8指定
- 問 / 問 / 問 / コマンドラインで文字コード指定なし
- 無 / 無 / 無 / タスクトレイの開くでUnicode指定
- 問 / 無 / 問 / タスクトレイの開くでUTF-8指定
- 問 / 問 / 問 / タスクトレイの開くで文字コード指定なし
- 無 / 無 / 無 / タスクトレイの最近使ったファイル
- 無 / 無 / 無 / タスクトレイの最近使ったフォルダでUnicode指定
- 問 / 無 / 問 / タスクトレイの最近使ったフォルダでUTF-8指定
- 問 / 問 / 問 / タスクトレイの最近使ったフォルダで文字コード指定なし
変更内容など
- 1.5.13.1以前と1.5.14.0~1.5.15.3にて1と5で動作が異なるため,1.5.16.0以降では問い合わせ無しに統一
- 1.5.13.1以前と1.5.14.0~1.5.15.3にて4と18で動作が異なるため,1.5.16.0以降では問い合わせ無しに統一
- 1.5.14.0~1.5.15.3にて6と20で動作が異なるため,1.5.16.0以降では問い合わせるに統一
- 仕様の勘違いにより1.5.14.0で変更してしまった部分を1.5.16.0で従来仕様に戻す
ファイルが存在しない場合
評価条件
前回Unicodeで開いた&&ファイルが存在しない&&現在開いていない
比較結果
前から1.5.13.1以前の動作,1.5.14.0~1.5.15.3の動作,1.5.16.0以降の動作,動作内容,の順です.
- 問(前SJIS→今Uni) / 無(SJISで開く) / 無(Unicodeで開く) / ファイルメニューの最近使ったファイル
- 無(Unicodeで開く) / 無(Unicodeで開く) / 無(Unicodeで開く) / コマンドラインでUnicode指定
- 問(前UTF8→今Uni) / 無(UTF8で開く) / 問(前UTF8→今Uni) / コマンドラインでUTF-8指定
- 問(前SJIS→今Uni) / 無(SJISで開く) / 無(Unicodeで開く) / コマンドラインで文字コード指定なし
- 無(Unicodeで開く) / 無(Unicodeで開く) / 無(Unicodeで開く) / タスクトレイの最近使ったファイル
変更内容など
- 1.5.14.0~1.5.15.3の1と3と4は仕様の勘違いによるもの.
- ファイルがなくても前回の文字コードを優先するため,1.5.16.0以降にて1と4を変更
多重オープンで文字コードが異なるときは警告
すでに開いているファイルを別の文字コードで開こうとした場合は,「開きなおす」を使用して欲しい旨の警告が表示されます.
ファイルが存在する場合と存在しない場合に分けて,動作を確認した結果と変更点などを次に示します.
ファイルが存在する場合
評価条件
現在Unicodeで開いている&&ファイルが存在する
比較結果
前から1.5.13.1以前の動作,1.5.14.0~1.5.15.3の動作,1.5.16.0以降の動作,動作内容,の順です.
- 無 / 無 / 無 / ファイルメニューでUnicode指定
- 警 / 警 / 警 / ファイルメニューでUTF-8指定
- 無 / 無 / 無 / ファイルメニューで文字コード指定なし
- 無 / 無 / 無 / ファイルメニューの最近使ったファイル
- 無 / 無 / 無 / ファイルメニューの最近使ったフォルダでUnicode指定
- 無 / 無 / 警 / ファイルメニューの最近使ったフォルダでUTF-8指定
- 無 / 無 / 無 / ファイルメニューの最近使ったフォルダで文字コード指定なし
- 無 / 無 / 無 / ウィンドウ領域へファイルのD&D
- 無 / 無 / 無 / ウィンドウ領域へフォルダのD&DでUnicode指定
- 警 / 無 / 警 / ウィンドウ領域へフォルダのD&DでUTF-8指定
- 無 / 無 / 無 / ウィンドウ領域へフォルダのD&Dで文字コード指定なし
- 無 / 無 / 無 / コマンドラインでUnicode指定
- 無 / 無 / 警 / コマンドラインでUTF-8指定
- 無 / 無 / 無 / コマンドラインで文字コード指定なし
- 無 / 無 / 無 / タスクトレイの開くでUnicode指定
- 警 / 警 / 警 / タスクトレイの開くでUTF-8指定
- 無 / 無 / 無 / タスクトレイの開くで文字コード指定なし
- 無 / 無 / 無 / タスクトレイの最近使ったファイル
- 無 / 無 / 無 / タスクトレイの最近使ったフォルダでUnicode指定
- 警 / 警 / 警 / タスクトレイの最近使ったフォルダでUTF-8指定
- 無 / 無 / 無 / タスクトレイの最近使ったフォルダで文字コード指定なし
変更内容
- 6&10&13は,2&16&20と同じ動作をすべきなので,1.5.16.0以降にてすべて警告ありに統一
ファイルが存在しない場合
開いているファイルが存在しない場合とは,あまり一般的な状況ではありませんが,排他しない設定のときに開いているファイルが削除された場合,もしくはコマンドライン起動などで存在しないファイルを開いたときに発生します.
評価条件
現在Unicodeで開いている&&ファイルが存在しない
比較結果
前から1.5.13.1以前の動作,1.5.14.0~1.5.15.3の動作,1.5.16.0以降の動作,動作内容,の順です.
- 無 / 無 / 無 / ファイルメニューの最近使ったファイル
- 無 / 無 / 無 / コマンドラインでUnicode指定
- 無 / 無 / 警 / コマンドラインでUTF-8指定
- 無 / 無 / 無 / コマンドラインで文字コード指定なし
- 無 / 無 / 無 / タスクトレイの最近使ったファイル
変更内容
- 3の動作ではUTF-8で開けないので1.5.16.0以降にて警告表示