*情報 作者名:クジラ飛行机 引用元:[[ファイルの分割ツールを作ってみよう!(第75回):クジラ飛行机「文系サラリーマンのための仕事に役立つプログラミング入門」>http://pc.nikkeibp.co.jp/article/column/20080522/1003240/?P=2]] 勝手に改変 *概要 ファイルを単純分割します。 結合用のバッチファイルも一緒に作成します。 *解説 ***引数 分割ファイル:分割したいファイルの絶対パス 出力パス:破片ファイル、結合用バッチファイルの出力先パス 分割サイズ:破片ファイルの最大サイズ(B) ***返り値 (結合用バッチファイルの絶対パス) (破片ファイル001の絶対パス) (破片ファイル002の絶対パス) (破片ファイル003の絶対パス) ~~~ *サンプルプログラム なし *//本体 #----------------------------------------------------------------------- #----------------------------------------------------------------------- ●ファイル分割ログ出力(バッファ経過数,バッファ分割数,経過数,分割数) 母艦=「{バッファ経過数}/{バッファ分割数} - {経過数}/{分割数}」。 ●ファイル分割(分割ファイルを出力パスに分割サイズで) #オプション 分割識別ヘッダ=「part-」 バッファサイズ=1024 * 512 # 512KB もし、分割ファイル=空ならば、「分割ファイルが空です。」と言う。戻る。 もし、分割ファイルの存在=いいえならば、「分割ファイルが存在していません」と言う。戻る。 #----------------------------------------------------------------------- # ファイルの分割プログラム #----------------------------------------------------------------------- # -- 分割におけるメモ # 分割サイズ=1024 * 1024 * 1.2 # FD(1.2M) # 分割サイズ=1024 * 1024 * 1.4 # FD(1.4M) # 分割サイズ=1024 * 1024 * 8 # SDカード(8M) #----------------------------------------------------------------------- ファイル名=分割ファイルからファイル名抽出。 出力パス=出力パスの終端パス追加。 出力パスにフォルダ作成。 #----------------------------------------------------------------------- # 分割数を計算 B=分割ファイルのファイルサイズ。 CNT=INT(B÷分割サイズ)。 もし、(B%分割サイズ)<>0ならば、CNT=CNT+1。 # 実際の分割 H=分割ファイルを「読」でファイルストリーム開く。 ファイル一覧=空。 #----------------------------------------------------------------------- ゼロ数=CNTのバイト数。 Iを0から(CNT-1)まで繰り返す # 保存用のファイル F=「{分割識別ヘッダ}{ファイル名}.{(I+1)をゼロ数でゼロ埋め}」。 ファイル一覧にFを配列追加。 Hで(I*分割サイズ)にファイルストリーム位置設定。 # 巨大ファイル対策 - コピーバッファに分けてコピー 今回サイズ=分割サイズ。 次回位置=(I+1)*分割サイズ。 もし、次回位置>Bならば、 今回サイズ=B-I*分割サイズ。 H2=出力パス&Fを「書」でファイルストリーム開く。 CNT2 = INT(今回サイズ÷バッファサイズ)。 もし、(今回サイズ%バッファサイズ)<>0ならば、CNT2=CNT2+1 Jを0からCNT2まで繰り返す SZ=バッファサイズ。 NEXT=(J+1)*バッファサイズ もし、NEXT>今回サイズならば SZ=今回サイズ-J*バッファサイズ S=HでSZをファイルストリーム読む。 H2でSをファイルストリーム書く。 ファイル分割ログ出力(J,CNT2,F,CNT)。 H2をファイルストリーム閉じる。 ファイル分割ログ出力(J,CNT2,F,CNT)。 Hをファイルストリーム閉じる。 #----------------------------------------------------------------------- # 結合用のバッチファイルを保存 結合用ファイル一覧=ファイル一覧を「+」で配列結合 BAT補助=ファイル名の「.」を「_」に置換。 BAT名=「{出力パス}{BAT補助}.bat」 「rem ファイルの結合用バッチファイル{改行}copy /b {結合用ファイル一覧} {ファイル名}」をBAT名に保存。 #----------------------------------------------------------------------- 返値ファイル一覧=空。 BAT名を返値ファイル一覧に配列追加。 ファイル一覧で反復 出力パス&対象を返値ファイル一覧に配列追加。 返値ファイル一覧で戻る。 #----------------------------------------------------------------------- #----------------------------------------------------------------------- ---- #comment() ----