●ファイル分割

「●ファイル分割」の編集履歴(バックアップ)一覧に戻る

●ファイル分割 - (2009/05/31 (日) 17:27:21) のソース

*情報
作者名:クジラ飛行机
引用元:[[ファイルの分割ツールを作ってみよう!(第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()

----
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。