Contenu connexe
Similaire à FileManで楽々ファイル操作 (20)
Plus de Masashi Umezawa (20)
FileManで楽々ファイル操作
- 4. 入手方法
Squeak
SqueakMap (Stable)
○ http://map.squeak.org/package/f9917683-25da-
4a6c-a013-b36527a100c1
SqueakSourceJ (Current)
○ http://squeaksource.blueplane.jp/FileMan.html
VisualWorks
Cincom Public Store Repository
- 6. FileManの利点 (1)
小さい
コアとなるクラスは3つのみ
○ FmFileEntry
ファイルを表す
○ FmDirectoryEntry
ディレクトリを表す
○ FmFileIOAccessor
低レベルのファイルIOへのアダプタ
(移植時を除き普段は意識しない)
- 7. FileManの利点 (2)
簡単
ファイルとディレクトリはオブジェクト
○ ファイルに、更新日は? サイズは? 内容は?
○ ディレクトリに、子供となっているファイルは? ディレクト
リは?
などと聞けばよい
ディレクトリは辞書のように扱うことも出来る
○ キーがファイル名で、値がファイルの内容となる
○ #at:でファイル内容の取り出し、#at:put:で書き込み
- 8. FileManの利点 (3)
ポータブル
パスの記法はプラットフォームに依存しない
○ ‘.¥subDir¥subSubDir’ asDirectoryEntry
と書いた場合
Win、Mac、Linuxともに動作する
- セパレータの違いを吸収する
○ ‘/tmp’ asDirectoryEntry at: ‘myData’ put: data
と書いても
- やはり全てのプラットフォームで動作
- ドライブの有無も自動で判断
- 9. FileManの利点 (4)
拡張可能
FmDirectoryEntryやFmFileEntryを継承すれば特殊
な振る舞いをディレクトリやファイルに追加できる
例: 自動圧縮・展開
○ #at:put:すると’text.gz’ファイルが自動的に作られる
○ #at:で’text.gz’が展開される
| dir |
dir := './gzipped' asDirectoryEntry: FmGZipDirectoryEntry.
dir at: ‘text’ put: ‘これは圧縮されます'.
(dir at: 'text') inspect.
- 10. 利用例 (1)
バックアップ
‘foo’ディレクトリ以下のファイル群を日ごとに
’bkUp’ディレクトリ以下にバックアップしたい
'./foo' asDirectoryEntry copyTo: './bkUp' / Date today yyyymmdd
- 11. 利用例 (2)
エラーログ
‘error.log’ファイルに、エラーログ情報を追加で
書き込みたい
‘error.log’ asFileEntry appendContents: ‘エラー...’
- 12. 利用例 (3)
古いファイルの整理
‘foo’ディレクトリ以下のファイルで、拡張子が.txtで
100日ほど更新していないものを削除したい
dir := './foo' asDirectoryEntry.
current := TimeStamp current .
dir allFilesDo: [:file |
((file extension = 'txt') &
((TimeStamp fromSeconds: file modificationTime) plusDays: 100)< current)
ifTrue: [file delete]
].
- 13. 利用例 (4)
テキストファイル変換
改行コードがCRで、UTF-8のテキストファイルを、CRLF
を改行コードにして、さらにShift-JISに変換したい
conv := [:in :out |
out wantsLineEndConversion: true; lineEndConvention: #crlf;
converter: ShiftJISTextConverter new.
out nextPutAll: (in upToEnd)
].
dir := './foo' asDirectoryEntry.
dir filesDo: [:file |
file pipe: conv to: (dir / (file name copyReplaceAll: '.txt' with: '.sjis.txt'))
]