![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Neox_GeForce |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
Сделал так
в рекурсивной функции уже зачисляю. Диск Е: прошло за 10 сек а С: за 3 минуты Это сообщение отредактировал(а) Neox_GeForce - 22.5.2009, 16:19 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Neox_GeForce
Зачем? для этого же Dictionary есть. У него и поиск намного быстрее (логаритмическая сложность) и вместо двух контейнеров будет один. Я пример привел на предыдущей странице. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Тебе надо найти все дубликаты или найти дубликаты для известного файла?
|
|||
|
||||
| Neox_GeForce |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
круто. НО в files сохраняется одинаковых значений. тоесть если в каталоге ести одинаковые файли 1,11,111 to files[0]=11,1 files[1]=111,1 тоесть если есть 20 одинаковых файлов то будет 20!/(18!) 380пар. П.С стековая версия обхода каталогов понравилась Добавлено @ 17:08
Все дубликаты и вывести групы дубликатов Это сообщение отредактировал(а) Neox_GeForce - 22.5.2009, 17:18 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
||||||
|
|||||||
| Neox_GeForce |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
я тут придумал. тока не знаю как реализовать.
надо чота типа такого "размер файла"-список файлов "размер файла1"-список файлов МОжно ли обновлять значения словаря по заданому ключу????? Это сообщение отредактировал(а) Neox_GeForce - 22.5.2009, 19:05 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Лучше не размер. А Dictionary<CustomKey, List<string>>. CustomKey будет хранить размер и хеш. И перегружать Equals и GetHashCode, чтобы сравнивать вначале размер, а затем (если понадобится - хеш). Можно ещё считать хеш только по требованию, чтобы для файлов с "уникальным" размером вообще не считать его.
|
|||
|
||||
| Neox_GeForce |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
гм..
не пойму. 1. у меня есть список файлов каталога и пустой словарь дальше я не могу придумать норм алгоритм который би собирал дубликаты в групы(тоесть списки). И СustomKey ето что? структура? Это сообщение отредактировал(а) Neox_GeForce - 22.5.2009, 19:52 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Суть CustomKey - в переопределении Equals (если размеры не равно - хеши не сравниваем), ну и GetHashCode соответственно. Далее, key сам знает для какого он файла создавался (путь). Это позволит при вызове Equals, если равны размеры у двух ключей - вызвать (у обоих) подсчёт хеша файла и сравнить его (лишний раз хеш считаться не будет - для файлов "одиночек" по размеру). После подсчёта хеша - используем *в дальнейшем) рассчитанный хеш (сделай его nullable полем, например, чтобы проще было определить рассчитан или нет). Имя файла больше не несёт смысла. При такой реализации ключа достаточно пройтись по всему дереву каталогов, создать для каждого элемента ключ, сделать TryGetValue для дикшенри (если ничего не получили - создаём новый список и добавляем в дикшенри), добавить файл в список. После обхода по дереву каталогов, проходим по элементам дикшенри, если в списке больше одного элемента - это потенциальные кандидаты. Тут уже делаем full content comparsion.
|
|||
|
||||
| Neox_GeForce |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
(если ничего не получили - создаём новый список и добавляем в дикшенри) а если получили то куда ? в Словарь? но он же не сохраняет одинаковые ключи? Это сообщение отредактировал(а) Neox_GeForce - 23.5.2009, 15:19 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Если получили - добавляем элемент в полученный список.
|
|||
|
||||
| Neox_GeForce |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
и как переопределить Equals i GetHashCode, там ошибки "ConsoleApplication1.Program.CustomKey.Equals(ConsoleApplication1.Program.CustomKey, ConsoleApplication1.Program.CustomKey)": не найден метод, пригодный для переопределения КастомКей имеет три поля размер контрольная сумма и путь Я правильно понял?
Это сообщение отредактировал(а) Neox_GeForce - 23.5.2009, 22:05 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
||||
|
|||||
| Neox_GeForce |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
словарь у тя такой
Вот какой у меня код
З.Ы неработает подсветка Это сообщение отредактировал(а) Neox_GeForce - 24.5.2009, 11:06 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
||||||||
|
|||||||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Пытается получить список файлов для определённого ключа, если нету такого - создаёт новый список и добавляет его на этот ключ в словарь. Затем добавляет файл в список. Всё просто. GetHashCode ты не правильно переопределил. В данном случае выигрыша ноль (Dictionary будет всегда вызывать твой GetHashCode, да и ещё он у тебя не кешируется). Я бы вообще вернул в GetHashCode length. А в Equals:
Где Hash - прайват проперти:
Вот как-то так. И ещё - зачем тебе два прохода по файлам? Можно вместо result.AddRange(Directory.GetFiles(dir, "*.*")); сразу сделать foreach по файлам каталога и добавить их (как описано выше) в dictionary. |
||||
|
|||||
| Neox_GeForce |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
у меня выскакивает exception. отказано в доступе. как побороть то?
и
Это сообщение отредактировал(а) Neox_GeForce - 24.5.2009, 12:32 -------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
||||
|
|||||
| Neox_GeForce |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 14.11.2007 Где: Украина Репутация: нет Всего: нет |
Сделал.
Протестите пожалуйста. Задание у мя было такое: Найти одинаковые файлы по содержимому и вывести группы одинаковых файлов. Кажется работает Это сообщение отредактировал(а) Neox_GeForce - 24.5.2009, 20:56 Присоединённый файл ( Кол-во скачиваний: 10 )
Comparer.rar 73,77 Kb-------------------- ![]() Челябинские программисты настолько суровы, что обходятся без компиляторов. Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |