まりふのひと

テキストファイルのIOに FSO を使う利点は?

まめ録」でファイル名を変更するツールを作ろうとしている。
例えば、あるフォルダ下のファイル名の一覧をjモリー中に持つか、kExcelシートに書き出すか、lテキストファイルとして書き出すか‥‥ で、「FSO(File System Objectの略.ファイルシステムオブジェクト)の方がいい」理由を探った。

AccessVBAデータベース構築 応用編ソフトバンク出版)

書棚に眠っていた本。2000年6月20日初版と古く心配したが、Amazon(中古品7点¥ 223より コレクター商品1点¥ 2,300より)にあった。但し、定価は 本体 3,000円+税。

 FSOのメリット
 FSOを利用すると、Accessアプリケーションから、フォルダ/ファイルを作成、変更、移動および削除したり、特定のフォルダ/ファイルが存在するかどうかを検査し、存在している場合はそのパス名を検出することができます。その際、名前や作成された日付、最後に修正された日付などのフォルダ情報も取得することが出来ます。

VB6.0 テキストファイルの操作について (msn相談箱 投稿日時 - 2009-02-23 21:19:44)

■ テキストの読み書き速度について
 従来の Open, Line Input 等のステートメントよりも、FileSystemObject のテキストストリームを使った方が高速です。私の環境で約 60% 程度。
■ 扱うファイルサイズが大きい場合は、FileSystemObject が有利
 小さなサイズのファイルを扱う場合は、どのような方法であっても体感できる差は無いでしょう。しかし、極端な例で一行テキストを書き出す場合。FileSystemObject は

Set fso = CreateObject("Scripting.FileSystemObject")
といった初期化に必要な時間、オーバーヘッドが発生しますから、それなら Print でサクっと書いてしまった方が速い....ということもあるわけです。
■ 扱うファイルサイズが小さい場合は、Open, Line Input 等が有利
 どのファイルサイズで大小を分けるかは、ケースバイケースなので具体的には言えませんが、大まかにこのような線引きはできるかな。


 FileSystemObject は機能的に非常によく考えられており、上述の読み書きの速さ以外にも

  1. 優れた可読性をもったソースが書ける
  2. ファイル・フォルダの列挙、移動、コピー、削除等のオペレーションに便利なコマンドが多数用意されている

 Open, Line Input 等は VB 初期のころからあるステートメントで多少時代遅れの感は否めませんよね。ファイル I/O は、FileSystemObject に絞って覚えて構わないと思います。

  • Dir 関数は再帰処理できない、不便。でも、ファイル列挙は Dir の方が速かったりする。全てのケースで FileSystemObject が有利とは限らない。
  • 結局、そのうち「両方マスターしとかないと...」ということになると思いますが。使い分けですね。


納得!!!
今回は10行程度。l で、FSO は使わないことにした。