View previous topic :: View next topic |
Author |
Message |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Tue Mar 10, 2015 15:38 Post subject: |
|
|
Flasher
Переименовывает умляуты и кирилицу, но на больших файлах (проверял на 2-3 гигабайтных), начинает занимать всю оперативную память 2 Гб и выскакивает ошибка:
Строка: 46
Символ: 31
Ошибка: Недостаточно памяти для завершения операции.
Код: 8007000E
Источник: Provider
Первый скрипт с XMD5.dll на этих же файлах занимает 3,5 Мб
Flasher wrote: | Кстати, а почему не сделать аналог с фильтром и созданием Info.<CRC>? | Хорошо бы, как в rhash обновление crc файлов, a если их нет то создание. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Mar 10, 2015 20:36 Post subject: |
|
|
SVM
Насчёт памяти не знаю как решить в контексте приложенного модуля. Читается с экономией, а вот запись кусками приходит в объект до заполнения. У XMD5 свой внутренний алгоритм работы с заданным файлом, там этот вопрос, что логично, решён.
По поводу обновления и создания. А разве в скрипте создания Info.txt не так? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Tue Mar 10, 2015 23:04 Post subject: |
|
|
Flasher wrote: | А разве в скрипте создания Info.txt не так? | Ну там всё быстро происходит. Я имел ввиду rhash может не пересчитывать заново crc всех файлов (судя по скорости), а считает только те файлы которых нет в *.md5 и дополняет crc файл. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Mar 10, 2015 23:28 Post subject: |
|
|
SVM
Быстро или нет отношения к делу не имеет.
SVM wrote: | rhash может не пересчитывать заново crc всех файлов (судя по скорости), а считает только те файлы которых нет в *.md5 и дополняет crc файл. | Так не бывает. Чтобы что-то дополнить, нужно узнать, что дополнять, а значит, перечитать crc. Только это делать вовсе необязательно, достаточно перезаписать файл целиком. Поэтому я и не понял, зачем приводился пример с rhash, если данное событие в аналоге и так реализовано.
SVM wrote: | всю оперативную память 2 Гб | А чего не подкупить ещё? За 2-2.5 тыс. можно взять 4 Гб. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Wed Mar 11, 2015 00:54 Post subject: |
|
|
Flasher wrote: | Так не бывает. | Я думал в rhash -u, --update, в файле crc проверяет по имени недостающие файлы, считает только их и добавляет в crc файл. Например в папке 1 Тб файлов, добавил несколько файлов в папку и из-за этого пересчитывать все файлы? Я делаю это вручную, посчитал crc 2 файлов, открыл в akelPad, скопировал 2 строки в буфер, добавил в общий crc.
Flasher wrote: | А чего не подкупить ещё? | Компьютеру лет 6, его проще полностью обновить или искать БУ память. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Mar 11, 2015 02:04 Post subject: |
|
|
Согласен, хэш - не размер, нужен чисто update.
SVM wrote: | Компьютеру лет 6, его проще полностью обновить или искать БУ память |
Так 6 лет назад современные материнки допускали на борт DDR3.
Ещё посмотрю пару-тройку компонентов, работающих отдельно с файлами, как они с юникодными именами справляются. Если повезёт, сообщу. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Mar 12, 2015 01:47 Post subject: |
|
|
SVM
Новости неутешительные. Никто не хочет читать юникодные имена (умляутов не касается). Так как быть? Временно переименовывать на момент чекинга? Или к rhash обратимся?
 Про rhash: Жаль, что он не может сохранять в UTF-8 с ВОМ, а то Тотал кириллицу без ВОМ не прочтёт. А ТС-шную форму подобрать - раз плюнуть: rhash.exe -i -M -p"%m *%f\n" --speed --percents -o"Info.md5" *.*
Рекурсия там есть, но она собирает всё в один файл, что для нас, как я понимаю, не годится. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Sun Mar 15, 2015 09:44; edited 1 time in total |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Thu Mar 12, 2015 12:49 Post subject: |
|
|
Flasher wrote: | Так как быть? Временно переименовывать на момент чекинга? Или к rhash обратимся? | Тогда буду пользоваться первым скриптом XMD5, а умляуты и юникод переименовывать в Total Commander.
Flasher wrote: | Рекурсия там есть, но она собирает всё в один файл, что для нас, как я понимаю, не годится | Нужен скрипт аналог предыдущих скриптов, то есть в каждой папке *.md5 файл |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Mar 12, 2015 14:19 Post subject: |
|
|
SVM wrote: | Тогда буду пользоваться первым скриптом XMD5 | Мм.. А что не так с утилитами? Я помимо rhash ещё 3 нашёл, которые читают юникодные имена. Самая маленькая - 93 Кб.
SVM wrote: | а умляуты и юникод переименовывать в Total Commander. | Я то имел в виду - скриптом переименовывать...
SVM wrote: | Нужен скрипт аналог предыдущих скриптов, то есть в каждой папке *.md5 файл | Да, я понимаю, просто вариант с единым для подпапок хэш-файлом не такой уж и безнадёжный в плане удобства. Только работать с ним придётся не средствами ТС. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Thu Mar 12, 2015 15:43 Post subject: |
|
|
Flasher wrote: | А что не так с утилитами? Я помимо rhash ещё 3 нашёл, которые читают юникодные имена. | Не пойму это про какой скрипт, переименование файлов в структуре активного каталога по MD5, или подсчёт crc - сумм файлов и добавления в crc файлы? Если есть решение по умляутам и юникоду, то было бы отлично.
Flasher wrote: | просто вариант с единым для подпапок хэш-файлом не такой уж и безнадёжный в плане удобства. | Может этот вариант и удобный, но отпадает возможность проверки в Total Commander. А если удалить папку, потом нужно будет обновлять единый crc файл. Проще удалить папку вместе с crc файлом и не обновлять единый crc файл. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Mar 12, 2015 20:06 Post subject: |
|
|
SVM wrote: | Не пойму это про какой скрипт, переименование файлов в структуре активного каталога по MD5 ... Если есть решение по умляутам и юникоду, то было бы отлично. | Сперва нужно сделанное допилить, т.е. речь только о Юникоде и сохранении памяти.
Не буду тогда править старый вариант.
 Вот новый: Code: | '======================================================================
' Восстановить имена файлов в структуре активного каталога, сопоставляя
' данные с вложенным в каждую директорию хэш-файлом (по умолчанию md5)
' Ссылка на утилиту: http://www.fastpictureviewer.com/bin/hashfile.zip
' Условие: путь запуска - пустой
' Параметры: <фильтр-список расширений> <-sha1|-sha256>
' Примеры: *.* | *.txt;*.lst -sha1
' Автор: Flasher ©
'======================= Путь к утилите hashfile ======================
HPath = """%COMMANDER_PATH%\Utils\hashfile\hashfile.exe"""
'======================================================================
With WScript.Arguments
Filt = .Item(0) : If .Count = 2 Then Alg = " " & .Item(1)
End With : Dim WSH : Set WSH = CreateObject("WScript.Shell")
If InStrRev(WScript.FullName, "WScript.exe") Then
WSH.Run "CScript.exe """ & WScript.ScriptFullName & """ " & Filt & Alg, 0
WScript.Quit
End If : Set ShA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
Ext = Mid(Alg, 3) : If Ext = "sha1" Then Ext = "sha"
T = 1 : If Alg = "" Then Ext = "md5"
ForFolder WSH.CurrentDirectory
WSH.Popup Space(10) & "Готово!", 1.5, " Восстановление имён по " & Alg, 64
Sub ForFolder(Path)
Set Items = ShA.NameSpace(Path).Items
Items.Filter 192, "*." & Ext
If Items.Count = 1 Then
FP = Items.Item(0).Path
With CreateObject("ADODB.Stream")
.Open : .LoadFromFile FP : .Type = 1
For i = 2 To 4
.Position = 0 : .Read(i) : Str = Str & Hex(AscB(.Read(2)))
Next : Enc = "windows-1251" : If Str = "EFBBBF" Then Enc = "UTF-8"
.Close : .Type = 2 : .Open : .CharSet = Enc : .LoadFromFile FP
Do : F = .ReadText(-2) : Str = Split(F, " *")
Sum = Str(0) : If Filt <> "*.*" Then T = 0
If T = 0 And InStr(LCase(Filt), LCase(FSO.GetExtensionName(Str(1)))) Then T = 1
If T And Not Dict.Exists(Sum) Then Dict.Add Sum, Str(1) : c = c + 1
Loop Until .EOS : .Close
End With : Items.Filter 192, Filt
For Each F in Items
If LCase(FSO.GetExtensionName(F)) <> Ext And Abs(F.Size) > 0 Then
Sum = Split(WSH.Exec(HPath & Alg & " """ & F.Path & """").StdOut.ReadLine, ": ")(1)
Sum = Left(Sum, Len(Sum) - 1)
If Dict.Exists(Sum) Then
s = s + 1 : N = Dict.Item(Sum) : If Not FSO.FileExists(Path & "\" & N) Then F.Name = N
End If
End If : If s = c Then Exit For
Next : Dict.RemoveAll
End If : Items.Filter 160, "*"
If Items.Count Then
For Each Fold in Items : ForFolder Fold.Path : Next
End If
End Sub |
Что касается объединения, то я пока не решил. Думаю, что лучше будет добавлять ВОМ к создаваемым UTF-8-спискам самим rhash или другой утилитой. Это видится оптимальней по скорости. И, соответственно, это уже будет в ином топике. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Sat Mar 14, 2015 02:38; edited 2 times in total |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Fri Mar 13, 2015 22:06 Post subject: |
|
|
Flasher
Работает, но зачем то после переименования подсчитывает crc переименованных файлов. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 13, 2015 23:44 Post subject: |
|
|
SVM
С чего такой вывод? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Sat Mar 14, 2015 00:18 Post subject: |
|
|
Flasher
Переименовывает например 10 минут, потом 10 минут ничего не переименовывает, в процессах идёт подсчёт md5 уже переименованного файла "C:\Program Files\Total Commander\Plugins\utils\HashFile\hashfile.exe" -md5 "L:\Папка\Переименованный_файл.mp4" |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Mar 14, 2015 00:43 Post subject: |
|
|
SVM wrote: | потом 10 минут ничего не переименовывает | Скрипт проверяет все файлы, в том числе те, что не были переименованы. Это же заведомо узнать невозможно.
А само окно появляется за 10 минут до окончания? Что-то не верится.
И зачем тут ключ -md5? См. внимательно описание в шапке.
SVM wrote: | в процессах идёт подсчёт md5 уже переименованного файла | В коде нет ничего такого, чтобы подобное могло происходить.
Добавил счётчики. Если все требуемые файлы будут переименованы, то скрипт должен завершить работу. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|