<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; LangMF 8.0: разбиение файла на фрагменты (File split)]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=2298&amp;type=atom" />
	<updated>2008-10-03T21:24:33Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=2298</id>
		<entry>
			<title type="html"><![CDATA[LangMF 8.0: разбиение файла на фрагменты (File split)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=14463#p14463" />
			<content type="html"><![CDATA[<p><em>Без гарантий. Используете на свой страх&nbsp; и риск</em>.</p><p>Скрипт предназначен для разбиения заданного файла на фрагменты установленного размера а также для его восстановления. Для размещения фрагментов создается каталог с именем изначального файла.</p><p>Для разбиения файла перетащите его значок на кнопку &quot;Разбить Файл&quot; методом Drag &amp; Drop или нажмите эту кнопку, чтобы выбрать файл для деления.</p><p>Для восстановления файла перетащите значок каталога с фрагментами на кнопку &quot;Собрать Файл&quot; методом Drag &amp; Drop или нажмите эту кнопку,чтобы выбрать каталог.Также для сборки исходного файла можно использовать BAT расположенный в каталоге фрагментов.</p><p>Потребуется установленный <a href="http://www.script-coding.com/LangMF.html">LangMF 8.0</a>.</p><div class="codebox"><pre><code>&#039;Разбиение файлов v1.1
&#039;------------------------------------------------------------------------------------------------------
&#039;Language LangMF 8.0
&#039;OC Win98/ME
&#039;------------------------------------------------------------------------------------------------------
&#039;Скрипт предназначен для разбиения заданного файла на фрагменты установленного
&#039;размера а также для его восстановления.Для размещения фрагментов создается 
&#039;каталог с именем изначального файла.

&#039;Для разбиения файла перетащите его значок на кнопку &quot;Разбить Файл&quot; методом 
&#039;Drag &amp; Drop или нажмите эту кнопку,чтобы выбрать файл для деления.

&#039;Для восстановления файла перетащите значок каталога с фрагментами файла на кнопку
&#039;&quot;Собрать Файл&quot; методом Drag &amp; Drop или нажмите эту кнопку,чтобы выбрать каталог с
&#039;фрагментами.Также для сборки исходного файла можно использовать BAT расположенный 
&#039;в каталоге фрагментов.
&#039;------------------------------------------------------------------------------------------------------
&lt;#Module=FileSplitter&gt;
&#039;------------------------------------------------------------------------------------------------------
Sub Load(cmdline)
With form1
    .AutoRedraw        =True
    .BackColor        =&amp;H80FFFF
    .Width            =500*vbPx
    .Height            =210*vbPy
    .Caption        =&quot;Разбиение файла v1.1&quot;
    .Style.ToolWindow    =True
    .Style.TaskBar        =True
    .Add &quot;Command&quot;,1,    &quot;Width=150&quot;,&quot;Height=30&quot;, _
                &quot;Top=10&quot;,&quot;Left=10&quot;,&quot;Caption=Разбить Файл&quot;,&quot;OLEDropMode=1&quot;
    .Add &quot;Command&quot;,2,    &quot;Width=150&quot;,&quot;Height=30&quot;, _
                &quot;Top=50&quot;,&quot;Left=10&quot;,&quot;Caption=Собрать Файл&quot;,&quot;OLEDropMode=1&quot;
    .Add &quot;Label&quot;,1,        &quot;Width=150&quot;,&quot;Height=10&quot;, _
                &quot;Top=90&quot;,&quot;Left=10&quot;,&quot;Alignment=2&quot;,&quot;Caption=Размер фрагмента(Байт)&quot;
    .Add &quot;MText&quot;,1,        &quot;Width=150&quot;,&quot;Height=20&quot;, _
                &quot;Top=120&quot;,&quot;Left=10&quot;,&quot;MultiLine=False&quot;,&quot;Text=1457152&quot;,&quot;MaxLength=11&quot;
    .Add &quot;ProgressBar&quot;,1,    &quot;Width=480&quot;,&quot;Height=20&quot;, _
                &quot;Top=150&quot;,&quot;Left=10&quot;,&quot;BarBorder=1&quot;
    .Add &quot;Label&quot;,2,        &quot;Width=300&quot;,&quot;Height=100&quot;, _
                &quot;Top=10&quot;,&quot;Left=170&quot;,&quot;Alignment=2&quot;,&quot;Caption=Готово.Выберите файл.&quot;
    .Show
End With
End Sub

&#039;//Разбиение файла на фрагменты//
&#039;------------------------------------------------------------------------------------------------------
Function SplitFile(SourceFile)
    
    &#039;[Установка размера буфера,определение размера файла]
    &#039;----------------------------------------------------------------------------------------------    
    Dim buf
    bufSize=    CLng(Replace(form1.MText(1).Text,Chr(32),&quot;&quot;))
    buf=        String(bufSize,vbNullChar)
            Sys.File.FileOpen SourceFile,1,&quot;binary&quot;
        Sys.cSleep(50)
            Size=Sys.File.FileLOF(1)
        Sys.cSleep(50)
            If Size=0 Then 
                Sys.File.FileClose(1)
                Exit Function
            End If
    &#039;[Определение количества файлов и некоторых параметров]
    &#039;----------------------------------------------------------------------------------------------        
    FilesNum=    Fix(CDbl(Size/bufSize))+1
    SourceName=    Sys.File.GetFName(SourceFile)

    SourceExt=    Sys.File.GetFSideR(SourceFile)
    SplitName=    Sys.File.GetFSideN(SourceFile)

    SplitPath=    Sys.File.GetFPath(SourceFile)

    &#039;[Запрос на подтверждение]
    &#039;----------------------------------------------------------------------------------------------        
    iAnsw=MsgBox(    &quot;Файл &quot; &amp; SourceName &amp; &quot; будет разбит на &quot; &amp; FilesNum &amp; &quot; частей.&quot; &amp; vbCRLF &amp; _
            &quot;Уверены,что хотите продолжить?&quot;, _
            vbInformation+vbYesNo+vbSystemModal,&quot;Разбиение файла&quot;)
    If iAnsw=vbNo Then 
        Sys.File.FileClose(1)
        Exit Function
    End If

    &#039;[Установка параметров элементов управления]
    &#039;----------------------------------------------------------------------------------------------
    form1.Command(1).Enabled    =False
    form1.Command(2).Enabled    =False
    form1.Label(2).Caption=    &quot;Исходный файл &quot; &amp; SourceName &amp; vbCRLF &amp; _
                &quot; разбивается на &quot; &amp; vbCRLF &amp; FilesNum &amp; &quot; частей.&quot;
    &#039;[Создание каталога для файлов-фрагментов]
    &#039;/Имя каталога=пробел+имя файла - при восстановлении файла исходное имя определяется/
    &#039;/по имени каталога/
    &#039;----------------------------------------------------------------------------------------------        
    Dir= SplitPath &amp; Chr(32) &amp; SplitName &amp; &quot;.&quot; &amp; SourceExt
    Sys.File.MkDir2 Dir

    &#039;[Деление файла на фрагменты]
    &#039;----------------------------------------------------------------------------------------------
    BatStr=&quot;&quot;
    i=1
    While Not Sys.File.FileEOF(1)

        &#039;[Слежение за разницей текущей позиции чтения и размером исходного файла]
        &#039;[Если эта разница меньше изначального размера буфера,то размер буфера]
        &#039;[устанавливается принудительно]
        &#039;--------------------------------------------------------------------------------------        
            diff=CLng(Size-Sys.File.FileLOC(1))
            If diff&lt;bufSize Then buf=String(diff+1,vbNullChar)

        &#039;[Запись файла-фрагмента]
        &#039;--------------------------------------------------------------------------------------        
            Sys.File.FileOpen Dir &amp; &quot;\&quot; &amp; SplitName &amp; &quot;_&quot; &amp; i ,2,&quot;binary&quot;
            Sys.File.FileGet 1,0,buf
            Sys.cSleep(50)
            Sys.File.FilePut 2,0,buf
            Sys.File.FileClose(2)

        &#039;[Генерация командной строки для Bat файла восстановления]
        &#039;--------------------------------------------------------------------------------------        
        If i=2 Then _ 
            BatStr=BatStr &amp; _
            &quot;copy /b &quot; &amp;  SplitName &amp; &quot;_&quot; &amp; i-1 &amp; &quot;+&quot; &amp; SplitName &amp; &quot;_&quot; &amp; i &amp; &quot; &quot; &amp; SourceName &amp; vbCRLF
        If i&gt;2 Then _
            BatStr=BatStr &amp; _
            &quot;copy /b &quot; &amp;  SourceName &amp; &quot;+&quot; &amp; SplitName &amp; &quot;_&quot; &amp; i &amp; &quot; &quot; &amp; SourceName &amp; vbCRLF    

        &#039;[Установка прогресса]
        &#039;--------------------------------------------------------------------------------------        
        form1.ProgressBar(1).BarProcent=Fix((i*100)/FilesNum)
        DoEvents
    i=i+1
    Wend
    Sys.File.FileClose(1)

    &#039;[Запись Bat файла восстановления]
    &#039;----------------------------------------------------------------------------------------------
    Sys.cSleep(100)
        Sys.Conv.Str2File BatStr,Dir &amp; &quot;\&quot; &amp; SplitName &amp; &quot;.BAT&quot;
    &#039;[Установка параметров элементов управления]
    &#039;----------------------------------------------------------------------------------------------
    Sys.cSleep(100)
        form1.ProgressBar(1).BarProcent    =0
        form1.Command(1).Enabled    =True
        form1.Command(2).Enabled    =True
        form1.Label(2).Caption        =&quot;Готово.Выберите файл.&quot;
    MsgBox &quot;Готово&quot;,vbInformation+vbSystemModal,&quot;Разбиение файла&quot;
End Function

&#039;//Объединение фрагментов в исходный файл//
&#039;------------------------------------------------------------------------------------------------------
Function MergeFile(InitDir)

    &#039;[Имя исходного файла]
    &#039;----------------------------------------------------------------------------------------------        
    MaskToMerge=Sys.LTrimS(Sys.File.GetFName(InitDir))

    &#039;[Запрос на подтверждение]
    &#039;----------------------------------------------------------------------------------------------
    iAnsw=MsgBox(    &quot;Уверены,что хотите восстановить файл &quot; &amp; MaskToMerge &amp; &quot;?&quot;, _
            vbInformation+vbYesNo+vbSystemModal,&quot;Разбиение файла&quot;)
    If iAnsw=vbNo Then Exit Function

    &#039;[Установка параметров элементов управления]
    &#039;----------------------------------------------------------------------------------------------
    form1.Command(1).Enabled    =False
    form1.Command(2).Enabled    =False
    form1.Label(2).Caption=    &quot;Восстановление файла &quot; &amp; MaskToMerge

    &#039;[Определение имени изначального файла по имени каталога и создание файла-болванки]
    &#039;----------------------------------------------------------------------------------------------
    Name    =Sys.LTrimS(Sys.File.GetFSideN(MaskToMerge))
    Ext    =Sys.File.GetFSideR(MaskToMerge)
    Sys.File.FileOpen InitDir &amp; &quot;\&quot; &amp; Name &amp; &quot;.&quot; &amp; Ext,1,&quot;binary&quot;
    &#039;[Восстановление файла]
    &#039;----------------------------------------------------------------------------------------------
    Dim buf
    i=1
    Do
        &#039;[Проверка наличия фрагмента]
        &#039;--------------------------------------------------------------------------------------
        If Sys.File.IsDirFile(InitDir &amp; &quot;\&quot; &amp; Name &amp; &quot;_&quot; &amp; i)=True Then
            form1.Label(2).Caption=    &quot;Восстановление файла &quot; &amp; MaskToMerge &amp; vbCRLF &amp; _
                        &quot;Фрагмент &quot; &amp; Name &amp; &quot;_&quot; &amp; i
            DoEvents
            Sys.File.FileOpen InitDir &amp; &quot;\&quot; &amp; Name &amp; &quot;_&quot; &amp; i,2,&quot;binary&quot;
        Else
            Exit Do
        End If

        &#039;[Установка буфера в соответствии с размером фрагмента]
        &#039;[Запись фрагмента в файл болванку]
        &#039;--------------------------------------------------------------------------------------
            buf=String(Sys.File.FileLOF(2),vbNullChar)
            Sys.File.FileGet 2,0,buf
            Sys.cSleep(50)
            Sys.File.FilePut 1,0,buf
            Sys.File.FileClose(2)
        i=i+1
    Loop
    Sys.File.FileClose(1)
    Sys.cSleep(100)

    &#039;[Установка параметров элементов управления]
    &#039;----------------------------------------------------------------------------------------------
    Sys.cSleep(100)
        form1.Command(1).Enabled    =True
        form1.Command(2).Enabled    =True
        form1.Label(2).Caption        =&quot;Готово.Выберите файл.&quot;
    MsgBox &quot;Готово.Проверьте правильность восстановленного файла.&quot;, _
        vbInformation+vbSystemModal, _
        &quot;Восстановление файла&quot;
End Function
&lt;#Module&gt;
&#039;-------------------------------------------------------------------------------------------------------
&lt;#Form=form1&gt;
    &#039;-----------------------------------------------------------------------------------------------
    Sub Form_Unload()
        EndMf
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
    Sub Command1_Click()

        &#039;[Выбор файла для деления на фрагменты]
        &#039;---------------------------------------------------------------------------------------
        If CLng(Mid(lmf_Version,1,1) &amp; Mid(lmf_Version,3,1))&gt;=78 Then
            SourceFile=Sys.CDlg.ShowOpen(    &quot;All Files|*.*&quot;, _
                            &quot;Выберите файл для деления&quot;, _
                            Sys.Path,&quot;*.*&quot;,form1.Hwnd,1+4096)
        Else
            SourceFile=Sys.CDlg.ShowOpen(    &quot;Выберите файл для деления&quot;, _
                            &quot;All Files|*.*&quot;,Sys.Path, _
                            &quot;*.*&quot;,form1.Hwnd,1+4096)        
        End If
        If SourceFile&lt;&gt;&quot;&quot; Then SplitFile(SourceFile)
        &#039;---------------------------------------------------------------------------------------
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
    Sub Command2_Click()

        &#039;[Выбор каталога содержащего фрагменты]
        &#039;---------------------------------------------------------------------------------------
        InitDir=Sys.CDlg.ShowFolder    (&quot;Выберите каталог с фрагментами файла:&quot;,form1.Hwnd)
        If InitDir&lt;&gt;&quot;&quot; Then MergeFile(InitDir)
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
    Sub Command1_OLEDragDrop(Data,Effect,Button,Shift,X,Y)
        With Data.Files
            If .Count=1 Then SplitFile(.Item(1))
        End With
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
    Sub Command2_OLEDragDrop(Data,Effect,Button,Shift,X,Y)
        With Data.Files
            If .Count=1 Then MergeFile(.Item(1))
        End With
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
    Sub MText1_Change()
        With form1.MText(1)
            If Len(.Text)&gt;3 Then .Text=Sys.cFormat(.Text,&quot;### ### ###&quot;)
            .SelStart=Len(.Text)
        End With
    End Sub
    &#039;-----------------------------------------------------------------------------------------------
&lt;#Form&gt;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2008-10-03T21:24:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=14463#p14463</id>
		</entry>
</feed>
