Что нового

Как разделить файл на части

MockeR

Знающий
Сообщения
101
Репутация
14
Всем Привет :smile:

Есть файл ~ 500Mb. Как его разбить на части по 5Mb каждый?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
$sPath = 'C:\onebig\file.big'
$sPathNew = 'C:\manysmall\'
$hRead = FileOpen($sPath, 16)
$i = 1
While 1
    $hWrite = FileOpen($sPathNew & 'file_' & $i & '.small', 16 + 2)
    $xChunk = FileRead($hRead, 5*1024*1024)
    If @error = -1 Then ExitLoop
    FileWrite($hWrite, $xChunk)
    FileClose($hWrite)
    $i += 1
WEnd
FileClose($hRead)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR
Или так.
Разделить:
Код:
#include <Constants.au3>

$iMax = 1024 * 1024 * 5
$sFile = @ScriptDir & '\mult.avi'

$sFolderName = StringRegExpReplace($sFile, '^.*\.', '') & '_' & StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$sNewName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$hFile = FileOpen($sFile, 16)
$iSize = FileGetSize($sFile)

$iPart = Int($iSize / $iMax)
$iEnd = Mod($iSize, $iMax)

For $i = 0 To $iPart
	FileSetPos($hFile, $iMax * $i, $FILE_BEGIN)
	$sTempText = FileRead($hFile, $iMax)
	$hTempFile = FileOpen(@ScriptDir & '\' & $sFolderName & '\' & ($i + 1) & '_' & $sNewName & '.xyz', 26)
	FileWrite($hTempFile, $sTempText)
	FileClose($hTempFile)
Next

FileClose($hFile)

IniWrite(@ScriptDir & '\' & $sFolderName & '\' & 'File.ini', 'File','FileName', StringRegExpReplace($sFile, '^.*\\', ''))
IniWrite(@ScriptDir & '\' & $sFolderName & '\' & 'File.ini', 'File','FilePart', ($iPart + 1))
Соединить:
Код:
$sFile = IniRead(@ScriptDir & '\File.ini', 'File','FileName', 'error')
$iPart = IniRead(@ScriptDir & '\File.ini', 'File','FilePart', 'error')
$sName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')

$hFile = FileOpen(@ScriptDir & '\' & $sFile, 17)
For $i = 1 To $iPart
	$hTempFile = FileOpen(@ScriptDir & '\' & $i & '_' & $sName & '.xyz', 16)
	$sTempText = FileRead($hTempFile)
	FileWrite($hFile, $sTempText)
	FileClose($hTempFile)
Next
FileClose($hFile)
 
Верх