WindowsのMS Officeとハードリンク
Windowsでハードリンクを作成したExcelの文書ファイルを編集して保存すると、直接開いたパスのファイルが更新されたファイルになり、他のハードリンクされているファイルが古いままになってしまう。これはExcelのファイルの保存方法に由来するもの。
Excelは昔からファイルの上書き保存の際に、
1. 新しいファイルを別名で保存先ディレクトリに作成
2. 元のファイルを削除
3. 新しいファイルを本当の名前にリネーム
という手順で保存している(うろ覚えだけど、Excel 2.0の時から既にこういう保存方法だったような気がする。4.0の時は間違いなくこの方法だった)。ハードリンクのあるファイルを開くと、2.のところでリンクがひとつ削除されてしまい、3.でリネームされた保存後のファイルにはハードリンクの設定は引き継がれないのである。これはExcelのファイル保存の手順とハードリンクの機構からしてまったく正しい動作ではあるのだけど、実用にはハードリンクが使えないじゃないか。Windows的にはショートカットを使うのが正しいやり方なのだろうな。だったらハードリンクなんて実装するなよ>M$
Wordのファイル保存手順は調べたことが無いので同じやり方かどうかは不明だけど、Wordで試すともっと訳のわからないことになる。上書き保存したファイルのハードリンクが消えるのはExcelと同じなのだけど、他のリンクに何故か不可視属性が設定されてしまう。
ちなみにメモ帳(notepad.exe)やOpenOffice.org Calcやクラリスワークス4.0では普通にもとのファイルの上に上書き保存するようで、ハードリンクが消えたりはしなかった。こちらの方がありがたいんだけどなあ。
| 固定リンク
「Windows」カテゴリの記事
- テンポラリディレクトリの設定でNotesがフリーズ(2020.12.05)
- OneDriveが起動しない(2020.10.10)
- Windows 10 1909でBluetoothデバイスのペアリング(2020.10.04)
- Windows 10でM-AUDIO Transit-USB(2020.09.12)
- Windows 10が起動中にブラックアウト(2020.09.05)
コメント
MS-DOS時代に、少々古いフロッピーディスクを使用するなどの理由でファイルシステムの信頼性が低いとき、よくExcelと同じ方法でプログラムを組みました。どのタイミングでも必ずどれかのファイルが残るので(最悪でも保存前のみ、最善で保存後のみ、時々新旧入り混じって)、必ず復旧できるのです。
投稿: 通りすがり | 2007年7月 7日 (土) 12時07分
コメントありがとうございます。
たしかにExcelが開発された頃(発売は1985年頃なので、1983年あたりから開発を始めたのだと思う)はフロッピーにOSもアプリケーションも入っていましたので、Excelの開発者もファイルの生存確率を上げるためにこうした方法にしたのかもしれませんね。
また、OSやアプリケーションの動作中に頻繁にディスク上のリソースを読み込むというディスクアクセスがやたらに多いシステムであるのもファイルの安全性重視に設計が傾く要因であったように思います。
しかもフロッピードライブは疑似線速度一定の制御をする変態ドライブでしたし (^^;)
投稿: yish | 2007年7月 7日 (土) 16時55分
大変参考になりました。
メモ帳は超高速で同期されるのに、なぜかexcelとwordだけうまくいかなくてイライラしてたら、7年も前に既に検証報告が出ているとは…(汗)同じくMS社のものなのになぜこんなに不便な仕組みになってるんでしょうね…
*確かにwordファイルは隠しファイルになってましたね(謎
でもこれ以上試すのやめてもいいとこれでよく判りましたので、感謝です!
投稿: うしお | 2014年9月10日 (水) 18時41分
コメントありがとうございます。
Windowsのハードリンクは1994年のNT 3.1で実装されたもののようで、1980年代なかばに最初はMac版として発売されたExcelやWordがハードリンクを考慮していないのはしかたがないことかもしれませんね。逆にメモ帳の方がシンプルに作られているので、OSの機能追加に素直に追従できているのかもしれません。
元の記事を書いた当時の環境はWindows XPとOffice 2003だったと思います。当時、NTFSUTilsというユーティリティでハードリンクやジャンクションを作って色々試していました。今はWindows 7でLink Shell Extension (http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html#contact) を使っています。Windows 7ではシンボリックリンクが実装されているので、もっぱらシンボリックリンクばかり使っています。とは言っても、フォルダに対するものばかりですが。
投稿: yish | 2014年9月10日 (水) 22時28分