※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「●ファイル分割」の編集履歴(バックアップ)一覧はこちら

●ファイル分割」の最新版変更点

追加された行は青色になります。

削除された行は赤色になります。

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