Создайте одинаковые файлы/ярлыки в папках \Documents and Settings\All users\Desktop\ и \Documents and Settings\[User]\Desktop\ и вы увидите абсолютно одинаковые имена на десктопе.
trr, проверил - работает, причем как надо! Еще предложения: 1. Сделать по DblClick просмотр файла по ShellExecute. Так сказать, чтобы зрительно/на слух убедиться, что будешь потом удалять дубликаты. 2. Позволить пользователю вручную удалить/оставить выбранные дубликаты. Сделать кнопки "выбрать всё", "снять выделение", "инвертировать выделение" и "удалить избранное". 3. Сделать опцию рекурсивного обхода файлов во всех вложенных директориях. Тогда файлы надо показывать с их относительным/абсолютным путем. На случай длительного обхода проверку лучше бы выделить в отдельный поток и в ходе выполнения показывать прогресс. Либо можно сравнивать файлы в двух разных папках, как это сделано в Total Commander. 4. Можно выводить результат сравнения в log-файл, либо в stdout. А так каркас вышел для вполне полезной утилитки - нашел у меня все дубликаты обоев в папке с тысячами файлов. Проверял - все корректно. Интересно, а проверка идет только по размеру, или по контрольным суммам в том числе (я не посмотрел код)? Просто если бы была проверка контрольных сумм, то не оставалось бы никаких сомнений, а это надо знать наверняка.
mc black Обязательно сделаю все 4 пункта. C 3-им будут некоторые проблемы (к примеру,сейчас нельзя искать файлы с двух дисков, только во всех папках одного). хмм. Если бы файлов было больше 36297 (найденные файлы с выбранным расширением), то вылезла бы ошибка о невоможности записи в память, т.к программа выделяет только 9mb памяти и нет никаких проверок . Но не думаю, что у кого то есть столько фото или музыки. Сначала по размеру, потом crc по Adler32 (первые 75kb).
>oxcc >А ты попробуй. Соберись с силами, сконцентрируйся на поставленной цели, если не получается - спроси совета у >старших товарищей, все в твоих руках ) я боусь.. а от этого материнская карта не сгорит? ведь если она сгорит я потеряю все свои сохранения от GTA III, а я уже прошел 3 миссии без читов!
trr 3-й пункт самый объёмный, его стоит оставить на последок или на новые версии утилитки. Насчет ограничения по кол-ву файлов - память можно выделять динамически небольшими блоками - столько, сколько требуется. Почитай про выделение памяти, это просто. По 3-му пункту самое основное пока - это выделить обработку в отдельный процесс, чтоб в папке с 36297 файлами окно программки ни на секунду не подвисло. Могу предложить ещё: 5. Кустомный тип файлов для сравнения, т.е. например комбобокс или радиокнопки + текстбокс или как-то типа того. Чтобы можно было самостоятельно задать шаблон для сканирования.
хорошая прога..., в смысле - окошко, кнопочки... вопрос автору, он должен разбираться уже, или к тем, кто знает - как сделать, чтобы листвьев показывал файлы только с определёнными расширениями - из какого-то списка...
ListView не умеет показывать файлы, он показывает только текст, определенный приложением. Этот вопрос не по ListView. Обход файлов в этой программе реализован через FindFirstFile/FindNextFile. Выбор файлов для поиска может осуществляться по маске (с использованием '*' и '?').
mc black - спасибо вот код, который, наверное, ищет файлы .. Код (Text): ReadTheFile proc uses edi LOCAL FindData:WIN32_FIND_DATA LOCAL hFind:DWORD LOCAL szBuff[256]:BYTE invoke lstrcpy, addr szBuff, addr szPath invoke lstrcat, addr szBuff, addr szAll and Cnt, 0 invoke FindFirstFile, addr szBuff, addr FindData .if eax != INVALID_HANDLE_VALUE mov hFind, eax .while (eax) inc Cnt invoke FindNextFile, hFind, addr FindData .endw .endif invoke FindFirstFile, addr szBuff, addr FindData .if eax != INVALID_HANDLE_VALUE mov hFind, eax xor edi, edi .while eax != 0 .if byte ptr FindData.cFileName != '.' invoke LoadListView, edi, addr FindData inc edi .endif invoke FindNextFile, hFind, addr FindData .endw invoke FindClose, hFind .endif ret ReadTheFile endp допустим, мне нужно показывать только .exe нужно искать в имени файла .exe? не нашёл такой функции, придётся самому писать ...
Да просто в "szBuff" помести "c:\*.exe" , если ищешь в одной папке. Или проверять так: Код (Text): lea edi,[FindData.cFileName] invoke lstrlen,edi mov ebx,[edi+eax-4] mov ecx,2 @asdf1: cmp bl,41h jb @asdf2 cmp bl,5Ah jnb @asdf2 add bl,20h @asdf2: cmp bh,041h jb @asdf3 cmp bh,05Ah jnb @asdf3 add bh,020h @asdf3: bswap ebx loop @asdf1 cmp ebx,'exe.' jne _asdfg .... _asdfg:
trr - ty... в "szBuff" помести "c:\*.exe" - прога умирает... код работает ... непонятно (мне) - почему нужно писать 'exe.' ?
Жжете. По поводу папки с именем con На линуксовом сервере создал папку con, расшарил по самбе. Захожу с винды через сетевое окружение чтоб посмотреть на con и гыыы сами попробуйте
и еще раз по поводу con вообще существует такая команда copy con 1.txt далее набираем: blabla и жмем ^Z (ctrl-Z), enter так что возможно это слово зарезервировано