techbank.jp コミュニティ

     あれ?どうやるんだっけ?を解決する
ようこそ techbank.jp コミュニティ ログイン | ID登録 | ヘルプ
検索

バイナリファイルの分割について

最終更新日 2010/5/16 19:50 by けろ-みお. 2 投稿.
Page 1 of 1 (3 items)
記事の並び替え: 前のトピック 次へ
  • 2009/6/4 13:53

    バイナリファイルの分割について

    現在、動画ファイルを分割したいと考えています。

    下記の方法(こぴぺです)

    何とか替えて(VB2008用に)実行しているのですが     '分割ファイル作成
          Open fileB & Format(ix, "0000") For Binary Access Write As #2
          Put #2, , ReadArea

    この部分の直し方がわかりません。どなたかご教授いただけないでしょうか?

    お願いします。

    Sub ファイル分割()

    Dim fileA As String
    Dim fileB As String
    Dim fileC As String

    '分割元ファイル
    fileA = ThisWorkbook.Path & "¥moto.lzh"
    '分割後ファイル(末尾に通番を付与する)
    fileB = ThisWorkbook.Path & "¥test"
    '復元用バッチファイル
    fileC = ThisWorkbook.Path & "¥recov.bat"

    '分割数
    Dim ix As Integer
    '分割長
    Dim ln As Long
    'インプットエリア
    Dim ReadArea() As Byte
    '元ファイル長
    Dim TotalLen As Long
    '終了フラグ
    Dim Last As Boolean
    'バッチファイルの内容
    Dim Bat As String

    '全体長セット
    TotalLen = FileLen(fileA)

    '分割長セット(1Mバイト)
    ln = 1000000

    '元ファイルオープン
    Open fileA For Binary Access Read As #1

    '分割数初期値化
    ix = 1

      P_loop:

    '分割長セット(TotalLenは残りバイト数を保持)
    '最後がぴったりだと駄目かも
    If TotalLen > ln Then
    TotalLen = TotalLen - ln
    Else
    ln = TotalLen
    Last = True
    End If

    '読込みエリア確保
    ReDim ReadArea(1 To ln)

    '読込み
    Get #1, , ReadArea

    '分割ファイル作成
    Open fileB & Format(ix, "0000") For Binary Access Write As #2
    Put #2, , ReadArea
    Close #2

    'バッチファイルの内容を作成
    If ix = 1 Then
    Bat = "copy /b " & "test" & Format(ix, "0000")
    Else
    Bat = Bat & " + " & "test" & Format(ix, "0000")
    End If

    '終了処理
    If Last Then

    Close #1

    Bat = Bat & " recov.lzh"
    Open fileC For Output As #1
    Print #1, Bat
    Close #1

    Exit Sub

    End If

    'ループ処理
    ix = ix + 1
    GoTo P_loop

    End Sub

    • 投稿ポイント: 0
  • 2009/6/9 22:29 返信先

    • gushwell
    • Top 10 Contributor
      男性
    • Joined on 2009/4/18
    • リーダー級
    • ポイント 0
    • Bloggers
      MVP

    僕は、VBもVB.NETもわからないので、お助けできませんが、

    まずは、ここでも読んで、

    http://msdn.microsoft.com/ja-jp/library/36b93480(VS.80).aspx

    バイナリファイルの読み書き方法を学ぶのが良いかと思います。

     

     

    • 投稿ポイント: 0
  • 2010/5/16 19:50 返信先

    • けろ-みお
    • Top 10 Contributor
      女性
    • Joined on 2008/12/18
    • techbank.jp 副管理人
    • 責任者級
    • ポイント 0
    • Bloggers
      Moderator
      MVP
      techbank

    回答が遅くなってしまい、すいません。放置していたわけではないので、お許しください。

    さて、ソースのななめ読みなので、意図してやりたいことがイマイチ見えてないのですが、

    FileNumber形式で、ファイルオープン(Openメソッド)使う形だとバイナリ分割は

    Visual Basic の旧スタイルの書き方(VB6.0以前の書き方)で、セキュリティの問題など、

    何かと厄介な問題が付きまといます。

    またこの書き方だと確かにバイナリ分割は面倒なので、VB.NETの準拠した

    FileStreamやMemoryStreamを使った書き方に直した方がよさそうです。

     

    Openメソッドでバイナリ扱うとSeekの位置をイチイチ確認しないと簡単に

    分割できないのと、あとでコードのメンテナンスがしずらくなってしまいます。

     

    Gushwellさんもアドバイスしている通り、

    http://msdn.microsoft.com/ja-jp/library/36b93480(VS.80).aspx

    にFileStreamやMemoryStreamで読み取ったバイナリを分割し、

    Writeする方法に書き直してみては如何でしょうか?

    やり方がよくわからないという場合は、別途ご相談ください。

     

    分類:
    • 投稿ポイント: 0
Page 1 of 1 (3 items)
掲示板の人気度
フィードメーター - techbank.jpコミュニティ
Blog全体の人気度
フィードメーター - techbank.jpコミュニティ
スカウター : techbank.jp Powered by PR-Icon