Утилита, помогающая при разгребании завалов цифрового мусора.
Одновременный поиск дубликатов как на жестких/SSD-дисках, так и на подключенных внешних дисках (флешках).
Содержимое всех носителей сравнивается между собой, с подсчётом контрольных сумм файлов.
Системные требования: - ПК с .NET 3.5 (любая операционка начиная с Windows 7)
Как пользоваться утилитой? 1) Выбираем диски поиска (верхняя строчка с буковками)
2) Выставляем минимальный размер находимых файлов (желтое окошко)
3) Нажимаем кнопку [Поиск]
4) Ждём
5) Анализируем найденные дубликаты: похожие файлы выделены одним цветом. (группы файлов)
6) Самый правый столбец (CRC32) содержит контрольную сумму файла. Файлы полностью идентичны ТОЛЬКО в случае совпадения их CRC32 (контрольных сумм) 7) Двойной щелчок по строке - открыть файл программой по умолчанию. (видео - откроется в проигрывателе, картинки - в ACDSee, тексты - в Блокноте, и т.д.)
История версий:
Скрытый текст:
[22.07.2020] - v1.0
[26.07.2020] - v1.1
* Файлы со слишком длинным путём больше не анализируются. Список этих файлов выдается в конце сканирования.
* Файлы с закрытым доступом (например, системные файлы Windows), выдававшие исключение (Exception), больше не анализируются. Список этих файлов выдается в конце сканирования.
* "Несуществующие" файлы больше не вызывают исключения. Такое происходит например, когда вы запустили Поиск, и в это время работаете с веб-браузере, который создаёт и удаляет кэш-файлы. Список этих файлов не выдается. (нет смысла)
* Исправлена ошибка в истекшем времени сканирования. (у переменной типа TimeSpan вместо поля .TotalSeconds ошибочно бралось поле .Seconds)
* Исправлен вылет при нажатии кнопки "Просмотр файла" при пустом списке файлов.
+ Добавлена кнопка "Открыть папку с файлом"
+ Добавлено пропорциональное масштабирование столбцов таблицы, при ресайзе главного окна приложения.
+ Цвет поля ввода размера файла - изменен на жёлтый.
[27.07.2020] - v1.2
[+] Работает удаление файлов в Корзину. Удаляются даже файлы с атрибутом 'read-only'.
[fixed] Устранён вылет при нажатии кнопки "Открыть папку".
[fixed] Таблица полностью очищается при нажатии кнопки "Стоп".
[fixed] Корректный подсчёт кол-ва дубликатов (и их суммарного размера)
[*] Начальный размер искомых файлов выставлен на 50 Mb (было 1000 Mb)
[*] Более точное масштабирование столбцов таблицы при ресайзе.
[*] Начальная высота окна приложения увеличена (с расчетом на экранное разрешение)
Это бред... Т.к может быть два разных текстовика в первом может быть написано: говно12345 а в другом :саня х*й
И у них могут быть одни и те же контрольные суммы
Т.к может быть два разных текстовика в первом может быть написано: говно12345 а в другом :саня х*й
И у них могут быть одни и те же контрольные суммы
Ну попробуй, найди такой файл))
Ты прежде, чем писать подобное, сначала убедись, что ты прав. Ну или скачай прогу, проверь и скажи "Ага, вот, не работает", а так ты человеку еще и диз влепил ни за что, ни про что.
Ну, что могу сказать... .NET не надо использовать.
Скрытый текст:
Текст:
Кстати, что забавно -- судя по логу, использует он версию 2, притом, что 3.5 у меня вполне установлена.
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
at System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)
at System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
at System.IO.FileInfo..ctor(String fileName)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.buttonFind_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
FindTwins
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///D:/JSO/JSOFiles/Utils/FindTwins.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Windows.Forms.resources
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Память за собой не чистит, перекладывая на систему (при повторном пуске поиска количество занятой памяти не сбрасывается). Ну, тут уже современный "стиль" программирования, не к тебе вопрос.
Не даёт сменить диск и запустить поиск по-новому (пункты заблокированы после останова):
Скрытый текст:
Блин, Влад, это уже не смешно.
Скрытый текст:
Фрагмент текста:
************** Exception Text **************
System.IO.FileNotFoundException: Could not find file 'C:\Users\Morthimer McMare\AppData\Local\Mozilla\Firefox\Profiles\ovsdj6g8.default\cache2\entries\C3840F4512540D596EA809CC0C51F865DAC8BD44'.
File name: 'C:\Users\Morthimer McMare\AppData\Local\Mozilla\Firefox\Profiles\ovsdj6g8.default\cache2\entries\C3840F4512540D596EA809CC0C51F865DAC8BD44'
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileInfo.get_Length()
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.buttonFind_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
На версии 1.0 просто не могу завершить проверку ни по одному из своих дисков. При поиске программа ощутимо тормозит, при сбрасывании -- зависает на несколько секунд.
Вероятность для CRC32 по грубым прикидкам -- примерно 0,000000023%. Воистину, ты сначала найти попробуй такие, чтобы ещё и по размеру совпадали...
Другими словами -- технически, ты прав, но вот в матчасти ошибка.
К сожалению не получилось проверить свой диск до конца из-за ошибки .NET Framework'а.
Детальки ошибки:
Скрытый текст:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
at System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)
at System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
at System.IO.FileInfo..ctor(String fileName)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.EnlistFilesFromDir(String dir)
at FindTwins.Form1.buttonFind_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9151 (WinRelRS6.050727-9100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
mscorlib.resources
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9151 (WinRelRS6.050727-9100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
FindTwins
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/FoxPlays/Desktop/FindTwins.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9147 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Windows.Forms.resources
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
В процессе поиска дубликатов не увидел их самих. Нашло только два одинаковых файла - soundb0.obw, т.к. я одну программу установил в несколько папок, на этом спасибо!
Для меня остаётся странным, VladGuardian, что у тебя не было этой ошибки! Всё же рекомендую уже начать делать фиксы, т.к. программа работает некоректно и не завершает свою работу.
Ну попробуй, найди такой файл))
Ты прежде, чем писать подобное, сначала убедись, что ты прав. Ну или скачай прогу, проверь и скажи "Ага, вот, не работает", а так ты человеку еще и диз влепил ни за что, ни про что.
Известный фокус, на самом деле, и вполне может получиться случайно. Другое дело что шанс не очень большой, но выше, чем при использовании нормальных алгоритмов.
ZZYZX, а здесь уже вступает в игру точный размер файла. Насколько вижу по алгоритму, он по-любому добавляет несколько байт в конец, что уже создаёт несовпадение.
Не могут, именно для этого и были придуманы хэши, чтобы даже при самом незначительном изменении файла его хэш менялся кардинально.
Возможно стоит добавить MD5 алгоритм для проверки дубликатов.
demonized Коллизия бывает, хоть редко. Я бы отправил пожелание, чтоб можно было выбирать тип контрсуммы желаемый (или один, или несколько), по которому искать -- мд5, срс32, сха256 и т.д. -- заодно получится производительностью поиска управлять (какие-то алгоритмы более ресурсоёмкие, какие-то -- меньше)
Хотя наверное всё равно даже самый быстрый алгоритм упрётся в скорость харда или работы пакета дллек, на котором прога завязана. так что может быть это "призрачная экономия".
[fixed] Файлы со слишком длинным путём больше не анализируются.
Список этих файлов выдается в конце сканирования.
[fixed] Файлы с закрытым доступом (например, системные файлы Windows), выдававшие исключение (Exception), больше не анализируются.
Список этих файлов выдается в конце сканирования.
[fixed] "Несуществующие" файлы больше не вызывают исключения.
Такое происходит например, когда вы запустили Поиск, и в это время работаете с веб-браузере, который создаёт и удаляет кэш-файлы.
Список этих файлов не выдается. (нет смысла)
[fixed] Исправлена ошибка в истекшем времени сканирования.
(у переменной типа TimeSpan вместо поля .TotalSeconds ошибочно бралось поле .Seconds)
[fixed] Исправлен вылет при нажатии кнопки "Просмотр файл" при пустом списке файлов.
[+] Добавлена кнопка "Открыть папку с файлом"
[+] Добавлено пропорциональное масштабирование столбцов таблицы, при ресайзе главного окна приложения.
[+] Цвет поля ввода размера файла - изменен на жёлтый.
Кнопка "показать файл" и "открыть папку" работает даже если файл не выбран -- показывает сам экзешник этот. Надо чтоб они "серели", становясь недоступными.
Баг:
Суммарный объём дубликатов считается "оригинал+дубликаты", а надо "дубликаты".
К примеру, если у тебя три файла по 1 гигу, то надо писать "суммарный объём -- 2 гига, а не 3 (типа сколько места можно освободить, удалив только дубликаты -- ведь хоть один оригинальный файл тебе нужен из них, а прога подначивает всё удалить, обрадовав огромной цифрой.
Вопрос:
Как прога читает инфу о файлах? Что-то больно долго даже на SSD работает. Для сравнения, WinDirStat получает инфу о размере всех файлов за 6 секунд (индексирование выкл).
Наверное она напрямую в MFT как-то лезет, а не просто сканирует (хотя это лишь догадки).
При попытке выбора папки появилась данная ошибка -
Произошло это комбинацией - лкм по иконке с папкой, выбор диска, лкм по иконке с папкой.
Да, я решил нажать на эту кнопку ещё до скана, т.к. подумал, что это кнопка выбора папки для сканирования
Детали ошибки:
Скрытый текст:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at FindTwins.Form1.buttonOpenFolder_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9151 (WinRelRS6.050727-9100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
mscorlib.resources
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9151 (WinRelRS6.050727-9100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
FindTwins
Assembly Version: 1.1.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/FoxPlays/Desktop/FindTwins.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9147 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Windows.Forms.resources
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.9136 (WinRelRS6.050727-9100)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Через некоторое время скана диска C: у меня почему-то (что удивительно) намертво замёрз Windows, к сожалению пришлось его перезапускать так и не завершив сканирование до конца!
Первое, что бросилось в глаза -- довольно дикий размер по умолчанию анализируемых файлов (953.7 Мб -- я в целом-то такие файлы на компьютере стараюсь не хранить!)
Второе -- не очищается первый элемент при останове.
Третье -- "Стоп" слишком просто сделать, просто нажав на пробел или Enter (фокус никуда после старта не переходит, можно легко запороть, например, весь многочасовой анализ).
Четвёртая погрешность заключается в том, что FoxPlays описал: некие простые комбинации вызывают превышение границ списка.
Пятое (к счастью, оно не вылетело, как я предполагал, но зависло основательно):
Скрытый текст:
Шестое -- при достаточно внушительном списке все пункты на экран не помещаются:
Скрытый текст:
Как по мне и по help'у, неудобно, что он без какой-либо опции делает лишь перемещение файла в корзину, а не его удаление. Кстати, как через программу удалить файл, я не нашёл. Просмотреть -- да, аж два способа. Показать в директории -- есть. А вот удалить не смог -- перепробовал самые невероятные клавиши и их комбинации (для утилиты, можно сказать, офисного уровня -- без неприязни, ведь действительно так), вплоть до F8, Alt + Delete или одновременного нажатия ПКМ и ЛКМ.
Следствие предыдущей придирки: совсем не представлено управление горячими клавишами, как минимум, я таковых не нашёл, за исключением tab-переключения. Например, после завершения сканирования -- копия пути до файла (или лучше до содержащего каталога -- но тут уж по опции) по комбинации Ctrl + C или той, которая установлена в системе. Вариант -- по F5 обновление списка (тоже уже успел обломаться).
Устранено большинство упомянутых багов. Проверено на стационарном компе, и ноутбуке (по дискам C: + D: ) - вылетов/зависаний не было.
(диск C: особо критичен, т.к. содержит системные папки, файлы с закрытым доступом и пр. "подводные камни")
[+] Работает удаление файлов в Корзину. Удаляются также файлы с атрибутом 'read-only'. (на 'system' и 'hidden' не пробовал, но это явно нетипичный случай для моей утилиты) [fixed] Устранён вылет при нажатии кнопки "Открыть папку".
[fixed] Таблица полностью очищается при нажатии кнопки "Стоп".
[fixed] Корректный подсчёт кол-ва дубликатов (и их суммарного размера) - как предлагал lafoxxx [B0S]
[*] Начальный размер искомых файлов выставлен на 50 Mb (ранее было 1000 Mb)
[*] Более точное масштабирование столбцов таблицы при ресайзе.
[*] Начальная высота окна приложения увеличена (с расчетом на экранное разрешение)