В Powershell Как разделить большой двоичный файл? - PullRequest
10 голосов
/ 26 декабря 2010

Я видел ответ в другом месте для текстовых файлов, но мне нужно сделать это для сжатого файла.

У меня есть бинарный файл 6G, который нужно разбить на 100M. Я где-то пропускаю аналог для "головы" unix?

Ответы [ 3 ]

14 голосов
/ 26 декабря 2010

Неважно. Вот, пожалуйста:

function split($inFile,  $outPrefix, [Int32] $bufSize){

  $stream = [System.IO.File]::OpenRead($inFile)
  $chunkNum = 1
  $barr = New-Object byte[] $bufSize

  while( $bytesRead = $stream.Read($barr,0,$bufsize)){
    $outFile = "$outPrefix$chunkNum"
    $ostream = [System.IO.File]::OpenWrite($outFile)
    $ostream.Write($barr,0,$bytesRead);
    $ostream.close();
    echo "wrote $outFile"
    $chunkNum += 1
  }
}

Предположение: bufSize помещается в память.

11 голосов
/ 11 июля 2014

Ответ на следующий вопрос: как их соединить?

function stitch($infilePrefix, $outFile) {

    $ostream = [System.Io.File]::OpenWrite($outFile)
    $chunkNum = 1
    $infileName = "$infilePrefix$chunkNum"

    $offset = 0

    while(Test-Path $infileName) {
        $bytes = [System.IO.File]::ReadAllBytes($infileName)
        $ostream.Write($bytes, 0, $bytes.Count)
        Write-Host "read $infileName"
        $chunkNum += 1
        $infileName = "$infilePrefix$chunkNum"
    }

    $ostream.close();
}
0 голосов
/ 26 декабря 2010

Я ответил на вопрос, на который ссылаются в комментариях к этому вопросу bernd_k, но я бы использовал - ReadCount в этом случае вместо -TotalCount например

Get-Content bigfile.bin -ReadCount 100MB -Encoding byte

Это заставляет Get-Content прочитать чанкфайла в то время, когда размер порции представляет собой либо строку для кодирования текста, либо байт для байтовой кодировки.Имейте в виду, что при этом вы получаете массив, переданный по конвейеру, а не отдельные байты или строки текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...