<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: Сравнение бинарных файлов]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4134&amp;type=atom" />
	<updated>2010-02-07T22:35:53Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=4134</id>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32897#p32897" />
			<content type="html"><![CDATA[<p>Где здесь файл? Я вижу только поток — Stream. Если Вы подразумевали ещё и .LoadFromFile(), то, например, так:<br /></p><div class="codebox"><pre><code>Option Explicit

Const adTypeText            = 2
Const adModeReadWrite       = 3
Const adWriteLine           = 1
Const adSaveCreateOverWrite = 2


Dim objStream
Dim strContent

Set objStream = WScript.CreateObject(&quot;ADODB.Stream&quot;)

With objStream
    .Type = adTypeText
    .Mode = adModeReadWrite
    
    .Open
    .Charset = &quot;cp866&quot;
    
    .LoadFromFile &quot;c:\boot.txt&quot;
    
    &#039; После .LoadFromFile() текущая позиция в начале потока
    &#039; Читаем из потока, что прочли из файла и выводим на экран
    strContent = .ReadText
    WScript.Echo strContent
    
    &#039; Перемещаем текущую позицию в конец потока
    .Position = .Size
    
    &#039; Что-то пишем в поток, в виде строки с разделителем
    .WriteText &quot;; Hello, world!&quot;, adWriteLine
    &#039; Ещё что-то пишем…
    .WriteText &quot;; Hello, world!&quot;, adWriteLine
    
    &#039; Текущую позицию в начало потока
    .Position = 0
    
    &#039; Опять читаем из потока, что получилось, и выводим на экран
    strContent = .ReadText
    WScript.Echo strContent
    
    &#039; Пишем содержимое потока в новый файл
    .SaveToFile &quot;c:\boot_bak.txt&quot;, adSaveCreateOverWrite
    
    &#039; Закрываем поток
    .Close
End With

Set objStream = Nothing

WScript.Quit 0</code></pre></div><p><span style="color: Green"><strong>Крепыш</strong>, давайте всё-таки будем придерживаться <a href="http://forum.script-coding.com/rules.html">Правил</a>: один вопрос — одна тема,</span> бо мы уже здесь сборную солянку сделали. Оставим эту тему для вопросов, соответствующих заголовку.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-07T22:35:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32897#p32897</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32891#p32891" />
			<content type="html"><![CDATA[<p><strong>Крепыш</strong>, Вы бы уж определились на чем писать - JScript или VBScript. Я понимаю что WSH-технология позволяет готовить винегрет почти из любых языков, зарегистрированных в системе, но надо же соблюдать хоть какой-то порядок, пусть даже в собственном коде. И документацию все-таки надо открывать. Это к вопросам типа &quot;А как...&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2010-02-07T21:54:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32891#p32891</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32886#p32886" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, спасибо!</p><p>А как при открытии текстового файла методом<br /></p><div class="codebox"><pre><code>With WScript.CreateObject(&quot;ADODB.Stream&quot;)
  .Type = 2
  .Charset = &quot;UTF-8&quot;
...
  .Close
End With</code></pre></div><p>добавить строку в конец файла?</p>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-07T18:48:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32886#p32886</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32884#p32884" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>…
ReadMPEG = bla-bla-bla
Exit Function
…</code></pre></div><p>Вообще же момент интересный, и каждый решает его по-своему.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-07T18:33:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32884#p32884</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32882#p32882" />
			<content type="html"><![CDATA[<p>Вставил контроль ошибок, если нет доступа к файлу:<br /></p><div class="codebox"><pre><code>Function ReadMPEG(FileName)
  Dim size, f
  With WScript.CreateObject(&quot;ADODB.Stream&quot;)
    .Type = 1
    .Open
    On Error Resume Next
      .LoadFromFile(FileName)
    If Err.Number = 0 Then
      On Error Goto 0
    Else
      Err.Clear
      On Error Goto 0
      Wscript.Echo(&quot;Не удается открыть файл &quot; + FileName + &quot;.&quot;)
      Exit Function
    End If
    size = .Size
    f = .Read
    .Close
  End With
...</code></pre></div><p>Как проверить, код возврата функции?</p>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-07T17:07:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32882#p32882</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32876#p32876" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong><br />Можно сразу перезапустить в консольный режим:<br /></p><div class="codebox"><pre><code>Option Explicit
Dim objFSO, objArgs, Param, n
Set objFSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objArgs = WScript.Arguments
n = objArgs.Count
Param = &quot;&quot;

If n&gt;0 Then
  Dim i
  With New RegExp
    .Pattern = &quot;(^.+ .+$)&quot;
    For i=0 To n-1
      Param = Param + &quot; &quot; + .Replace(objArgs(i), &quot;&quot;&quot;$1&quot;&quot;&quot;)
    Next
  End With
End If

If Not LCase(objFSO.GetFileName(WScript.FullName)) = &quot;cscript.exe&quot; Then
  WScript.CreateObject(&quot;WScript.Shell&quot;).Run(&quot;CScript.exe &quot;&quot;&quot; + WScript.ScriptFullName + &quot;&quot;&quot;&quot; + Param)
  WScript.Quit(1)
End If

WScript.Echo(WScript.FullName)
WScript.Sleep(3000)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-07T11:27:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32876#p32876</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32875#p32875" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>... можно ли оформить этот скрипт в WSH, чтобы он обрабатывался CScript&#039;ом?...</p></blockquote></div><p>Нельзя. Но есть слабый выход из этого положения. </p><p>Иногда я делаю принудительную проверку, чтобы скрипт выполнялся ТОЛЬКО в консольном режиме.<br /></p><div class="codebox"><pre><code>// Если это не CSCRIPT.EXE - завершить
if ( ! WScript.FullName.match(/cscript/i) ) {
    WScript.Quit();
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2010-02-07T06:53:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32875#p32875</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32874#p32874" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>2. Переменные, заданные в функциях, будут локальными? Т.е., при выходе из функции ReadMPEG() память очищается от значения переменной f?</p></blockquote></div><p>Да. Да.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-06T17:52:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32874#p32874</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32873#p32873" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Теперь вопрос: можно ли оформить этот скрипт в WSH, чтобы он обрабатывался CScript&#039;ом?</p></blockquote></div><p>То есть? От того, в каком формате скрипт, хост не зависит.</p><p>Проверить, какой host можно командой:<br /></p><div class="codebox"><pre><code>WScript.Echo WScript.FullName</code></pre></div><p>Затем, по потребности, перезапустить под другим хостом.</p><p>Полностью сменить умолчальный хост на консольный «cscript.exe» можно командой:<br /></p><div class="codebox"><pre><code>cscript.exe //H:CScript</code></pre></div><p>или:<br /></p><div class="codebox"><pre><code>wscript.exe //H:CScript</code></pre></div><p>К сожалению, нет возможности задать хост в файле описания *.wsh, наподобие других параметров.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-06T17:46:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32873#p32873</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32872#p32872" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>1. Как в функции GetListFiles() помимо вывода в файл, вывести на консоль имя обрабатываемого файла?</p></blockquote></div><p>Отвечаю сам себе:<br /></p><div class="codebox"><pre><code>...
With objFSO.OpenTextFile(LogFile, 8, true)
    strHash = GetHash(ReadMPEG(FileName)) + &quot; *&quot; + FileName
    .WriteLine(strHash)
    Wscript.Echo(strHash)
    .Close
End With
...</code></pre></div><p>и запускать через консольную CScript.exe.<br />Теперь вопрос: можно ли оформить этот скрипт в WSH, чтобы он обрабатывался CScript&#039;ом?<br />И остался 2-й вопрос: Переменные, заданные в функциях, будут локальными? Т.е., при выходе из функции ReadMPEG() память очищается от значения переменной f? А то не охото &quot;таскать&quot; в памяти содержимое всего файла.</p>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-06T15:59:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32872#p32872</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32868#p32868" />
			<content type="html"><![CDATA[<p>Если задан 1 параметр, то считается, что это каталог и создаётся файл хэшей MD5 всех mp3 в этом каталоге и всех подкаталогах. Если задано 2 параметра, то считается, что заданы имена файлов, и они сравниваются побайтно без тэгов.<br /></p><div class="codebox"><pre><code>Option Explicit
Dim Title
Title = &quot;Сравнение MP3 файлов v.0.3a&quot;

Const Capicom_Hash_Algorithm_SHA1    = 0
Const Capicom_Hash_Algorithm_MD2     = 1
Const Capicom_Hash_Algorithm_MD4     = 2
Const Capicom_Hash_Algorithm_MD5     = 3
Const Capicom_Hash_Algorithm_SHA_256 = 4
Const Capicom_Hash_Algorithm_SHA_384 = 5
Const Capicom_Hash_Algorithm_SHA_512 = 6

Dim objArgs, objWSHShell
Set objArgs = WScript.Arguments
Set objWSHShell = WScript.CreateObject(&quot;WScript.Shell&quot;)

If objArgs.Count=0 Then
  objWSHShell.Popup &quot;Сравнение MP3 файлов.&quot; +vbCrLf+ &quot;При сравнении учитывается только сам MPEG поток.&quot; +vbCrLf+ &quot;Тэги ID3v1 и ID3v2 игнорируются.&quot; +vbCrLf+vbCrLf+ &quot;Использование:&quot; +vbCrLf+ WScript.ScriptName &amp; &quot; Каталог | Файл1 Файл2&quot;, 0, Title, 64
  WScript.Quit(1)
End If

Dim objFSO
Set objFSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

If objArgs.Count=1 Then
  Dim FolderName
  FolderName = objFSO.GetAbsolutePathName(objArgs(0))
  If Not objFSO.FolderExists(FolderName) Then
    objWSHShell.Popup &quot;Каталог &quot;&quot;&quot; + FolderName + &quot;&quot;&quot; не найден.&quot;, 0, Title, 48
    WScript.Quit(1)
  End If

  Dim objInitialFolder, LogFile
  Set objInitialFolder = objFSO.GetFolder(FolderName)
  LogFile = objFSO.BuildPath(FolderName, objFSO.GetBaseName(FolderName)) + &quot;.md5&quot;

  Call GetListFiles(objInitialFolder)
  Call BrowseFolders(objInitialFolder)

  Set objInitialFolder = Nothing
  objWSHShell.Popup &quot;Создан файл контрольных сумм MD5:&quot; +vbCrLf+ LogFile, 0, Title
  WScript.Quit(0)
End If

Dim FileName(1), i
For i=0 To 1
  FileName(i) = objFSO.GetAbsolutePathName(objArgs(i))
  If Not objFSO.FileExists(FileName(i)) Then
    objWSHShell.Popup &quot;Файл &quot;&quot;&quot; + FileName(i) + &quot;&quot;&quot; не найден.&quot;, 0, Title, 48
    WScript.Quit(1)
  End If
Next

Set objArgs = Nothing
Set objFSO = Nothing

&#039;If GetHash(ReadMPEG(FileName(0))) = GetHash(ReadMPEG(FileName(1))) Then
If ReadMPEG(FileName(0)) = ReadMPEG(FileName(1)) Then
  objWSHShell.Popup &quot;Эти файлы одинаковы:&quot; +vbCrLf+ FileName(0) +vbCrLf+ FileName(1), 0, Title, 64
Else
  objWSHShell.Popup &quot;Эти файлы РАЗЛИЧАЮТСЯ:&quot; +vbCrLf+ FileName(0) +vbCrLf+ FileName(1), 0, Title, 48
End If

Set objWSHShell = Nothing
WScript.Quit(0)
&#039;------------------------------------------------------------------------------

Sub BrowseFolders(Folder)
  Dim objFolder
  For Each objFolder In Folder.SubFolders
    Call GetListFiles(objFolder)
    Call BrowseFolders(objFolder)
  Next
  Set objFolder = Nothing
End Sub

Sub GetListFiles(Folder)
  Dim objFile, FileName
  For Each objFile in Folder.Files
    FileName = objFile.Path
    If LCase(objFSO.GetExtensionName(FileName)) = &quot;mp3&quot; Then
      With objFSO.OpenTextFile(LogFile, 8, true)
    .WriteLine(GetHash(ReadMPEG(FileName)) + &quot; *&quot; + FileName)
    .Close
      End With
    End If
  Next
  Set objFile = Nothing
End Sub

Function ReadMPEG(FileName)
  Dim size, f
  With WScript.CreateObject(&quot;ADODB.Stream&quot;)
    .Type = 1
    .Open
    .LoadFromFile(FileName)
    size = .Size
    f = .Read
    .Close
  End With

  Dim ID3, TAG
  If size&gt;10 And AscB(MidB(f,1,1))=73 And AscB(MidB(f,2,1))=68 And AscB(MidB(f,3,1))=51 Then
    ID3 = AscB(MidB(f,7,1))*2^21 + AscB(MidB(f,8,1))*2^14 + AscB(MidB(f,9,1))*2^7 + AscB(MidB(f,10,1)) + 10
  Else
    ID3 = 0
  End If
  If size&gt;355 And AscB(MidB(f,size-354,1))=84 And AscB(MidB(f,size-353,1))=65 And AscB(MidB(f,size-352,1))=71 And AscB(MidB(f,size-351,1))=43 Then
      TAG = 355
  ElseIf size&gt;128 And AscB(MidB(f,size-127,1))=84 And AscB(MidB(f,size-126,1))=65 And AscB(MidB(f,size-125,1))=71 Then
      TAG = 128
  Else
      TAG = 0
  End If
  ReadMPEG = MidB(f,ID3+1,size-ID3-TAG)
End Function

Function GetHash(arrBytes)
  With WScript.CreateObject(&quot;CAPICOM.HashedData&quot;)
    .Algorithm = Capicom_Hash_Algorithm_MD5
    .Hash arrBytes
    GetHash = .Value
  End With
End Function</code></pre></div><p>1. Как в функции GetListFiles() помимо вывода в файл, вывести на консоль имя обрабатываемого файла?<br />2. Переменные, заданные в функциях, будут локальными? Т.е., при выходе из функции ReadMPEG() память очищается от значения переменной f? А то не охото &quot;таскать&quot; в памяти содержимое всего файла.</p>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-05T20:31:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32868#p32868</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32853#p32853" />
			<content type="html"><![CDATA[<p>В условиях присваивать нельзя. Оператор равенства является оператором сравнения, а не присвоения в конструкции If. </p><p>Опоздал... Уже ответили <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[VSVLAD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24998</uri>
			</author>
			<updated>2010-02-04T21:18:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32853#p32853</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32852#p32852" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>На всякий случай уточню: таким образом удаляют только ссылки на объекты или любые переменные?</p></blockquote></div><p>Только на объекты.<br /></p><div class="quotebox"><blockquote><p>Как записать, чтобы возвращался результат присваивания, как в JScript, а не сравнения?</p></blockquote></div><p>Никак. Операция присваивания — это отдельный оператор в VBScript (ныне не поддерживаемый оператор «LET …»), потому присваивание в данном контексте невозможно. В JScript используется унаследованный от С поточный (от «поток») метод написания кода, с ограничителем; в VBScript, как наследнике BASIC&#039;а и FORTRAN&#039;а, — старый строчный метод, без ограничителей:<br /></p><div class="codebox"><pre><code>If a = 1 Then b = 2 Else b = 3</code></pre></div><p>и, в ряде конструкций, блочный, в качестве ограничителей могут выступать некоторые конструкции самого языка:<br /></p><div class="codebox"><pre><code>If a = 1 Then
    b = 2
Else
    b = 3
End If</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-04T21:14:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32852#p32852</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32851#p32851" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Вас интересует сам язык</p></blockquote></div><p>Да, меня интересует сам VBScript, его синтаксис, операторы, функции...<br /></p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>В принципе, как только заканчивается область видимости переменной, неявно вызывается деструктор объекта, в котором, собственно, и производится освобождение ссылки, очистка памяти, занятой объектом и возврат её менеджеру виртуальной памяти.<br />При явном вызове «Set …= Nothing» сие происходит сразу</p></blockquote></div><p>На всякий случай уточню: таким образом удаляют только ссылки на объекты или любые переменные?<br />(Я извиняюсь, если неточно выражаюсь, но я не программист и единственный язык программирования, который я знаю - это JScript. Но понятия &quot;объект&quot;, &quot;метод&quot;, &quot;класс&quot;... - для меня &quot;тёмный лес&quot;.)</p><p>И ещё вопросик:<br /></p><div class="codebox"><pre><code>Dim objFSO
Set objFSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
If objFSO.FileExists(f = file1) Or objFSO.FileExists(f = file2) Then WScript.Echo(f)</code></pre></div><p>Как записать, чтобы возвращался результат присваивания, как в JScript, а не сравнения?</p>]]></content>
			<author>
				<name><![CDATA[Крепыш]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=20359</uri>
			</author>
			<updated>2010-02-04T20:09:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32851#p32851</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: Сравнение бинарных файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=32826#p32826" />
			<content type="html"><![CDATA[<p>OFF: </p><div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>…сравнение 100-Мегабайтных файлов…</p></blockquote></div><p>И где Вы такие mp3 находите <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />…<br /></p><div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>Время, затрачиваемое на побайтное сравнение и вычисление хэша MD5 (закоментировано), &quot;на глаз&quot; примерно одинаково.</p></blockquote></div><p>Колоссальная разница будет наблюдаться, когда потребуется сравнивать множество файлов между собой: в случае побайтного сравнения каждого с каждым — потребуется примерно N раз читать каждый файл, тогда как при сравнении хэшей — только один раз, что в любом случае «перевесит» требуемое время на вычисление хэша (особенно, если использовать не скриптовый, а «компонентный» способ вычисления хэша).<br /></p><div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>Кстати, обязательно удалять объекты (Set objArgs = Nothing) после использования?</p></blockquote></div><p>Желательно сразу привыкать к этому. В принципе, как только заканчивается область видимости переменной, неявно вызывается деструктор объекта, в котором, собственно, и производится освобождение ссылки, очистка памяти, занятой объектом и возврат её менеджеру виртуальной памяти.</p><p>При явном вызове «Set …= Nothing» сие происходит сразу (в отличие от JScript, где сборщик «мусора» сам решает, когда чистить память; проблема эта настолько серьёзна, что даже была добавлена недокументированная команда для <em>принудительной</em> сборки мусора «CollectGarbage()» — см., например: <a href="http://forum.script-coding.com/viewtopic.php?id=3158">HTA JavaScript: Как правильно закрыть Excel?</a>). Иногда бывает так, что забывают подчищать за собой в нужных местах (чаще всего в разнообразных циклах, где на каждом проходе создаётся новый объект), и тогда, что называется, скрипт начинает «кушать» память. Потому я предпочитаю всегда указывать «Set …= Nothing», даже когда сие будет сделано автоматически, дабы не отвыкать.<br /></p><div class="quotebox"><cite>Крепыш пишет:</cite><blockquote><p>С VBScript не знаком, так что поправьте, если что не так. И дайте, пожалуйста, ссылку на справочник по VBScript на русском (типа такого).</p></blockquote></div><p>Вас интересует сам язык или набор объектов WSH (хотя последнее — вряд ли, Вы ведь на JScript пользовали те же объекты)? По первому — на русском, честно говоря, даже не знаю. Но, может, коллеги с этим помогут.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-02-03T21:45:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=32826#p32826</id>
		</entry>
</feed>
