- 2009年9月 8日 22:46
- JSFL
意外かもしれませんが、JSFLはファイルシステムにアクセスすることができ、ファイルやディレクトリの読み書きが可能です。今回のエントリーでは、ディレクトリーのコピーについて記しています。
JSFLでファイルをコピーする場合は、FLfile.copyが便利です。このメソッドは、コピー元とコピー先のファイルシステムのURIを指定して使用します。ところが、このメソッド、実はディレクトリごとのコピーを行うことが出来ません。そこで、このメソッドを拡張してみましょう。ポイントは以下の4個です。
- フォルダ内の一覧の取得する
- ディレクトリ・ファイルの判定
- ディレクトリの作成
- 再帰
function copyDirectory(dirURI,saveURI){
dirURI = appendSlash(dirURI);
saveURI = appendSlash(saveURI);
var lists = FLfile.listFolder(dirURI);
for(var index in lists){
var targetURI = dirURI+lists[index];
var copyURI = saveURI+lists[index];
//ディレクトリか否か判定
if(FLfile.getAttributes(targetURI).indexOf("D") >= 0){
FLfile.createFolder(copyURI);
copyDirectory(targetURI,copyURI)
}else{
FLfile.copy(targetURI,copyURI)
}
}
}
function appendSlash(str){
return (str[str.length-1] == "/") ? str : str +"/";
}
フォルダ内のファイルの一覧を取得する
フォルダ内のファイルの一覧を取得するには、 FLfile.listFolderを使用します。ファイル名が配列で返ってきます。
ディレクトリ・ファイルの判定
今回の肝となるところですが、簡単にすませたいのであれば、ファイル名 に"." が含まれているかどうかでどうか判定することも出来ますが、拡張子のついていないファイルに対応することが出来ません。そこで、FLfile.getAttributesを使って、ファイル・ディレクトリの属性情報を文字列で取得します。このメソッドを使用することで、以下の項目を調べることが出来ます。この情報を精査することで、ディレクトリかどうかを判断することが可能です。
- R -- 読み取り専用
- D --フォルダ(ディレクトリ)
- H -- 非表示(Windows のみ)
- S -- システムファイルまたはシステムフォルダ(Windows のみ)
- A -- アーカイブ可能(Windows のみ)
ディレクトリの作成
ディレクトリをコピーすることは出来ませんが、作成することはできます。それには、FLfile.createFolderを使用します。
再帰
精査したオブジェクトがディレクトリだった場合にはディレクトリを作成しますが、中身は作成もコピーもされません。そこで、今度はそのURIを引数に設定して関数を再帰させます。こうすることで、ディレクトリが末端にいくまでコピーさせることができます。



