Сравнить 2 файла js
Я хочу сравнить два больших файла (более 5 ГБ) и выяснить, совпадают они или нет. Одно из решений, которое я рассмотрел, - это хеширование обоих с помощью криптографии, а затем сравнение хешей. Но это займет много времени, так как мне придется просмотреть все файлы вместо того, чтобы останавливаться, когда обнаруживается разница.
Еще одно решение, которое я подумал, заключалось в том, чтобы сравнить файлы во время потоковой передачи с помощью fs.createReadStream() и прервать работу при обнаружении различия.
Но я не совсем уверен, как можно синхронизировать два потока.
Сравнение с предыдущей локальной версией файла
Даже если вы не используете какую-либо систему контроля версий, IDEA хранит исторические версии ваших локальных файлов. Вы можете щелкнуть правой кнопкой мыши в вашем редакторе и выбрать Local history → Show history в контекстном меню.
Здесь вы можете просмотреть более старые версии вашего текущего файла и увидеть разницу между старой и текущей версией и применить любые изменения, если это необходимо.
3 ответа
По запросу в ваших комментариях, если вы хотите увидеть, как можно записать реализацию, чтобы сделать это, вот один. Вот как это работает:
- Откройте каждый из двух файлов
- Сравните два размера файлов. Если не то же самое, разрешите ложь.
- Выделите два буфера 8k (вы можете выбрать размер используемого буфера)
- Прочитайте 8k каждого файла (или меньше, если не осталось 8k в файл) в свои буферы
- Сравните эти два буфера. Если не идентичны, разрешите false.
- Когда вы закончите сравнивать все байты, разрешите правду
Все это (есть некоторые другие подробности), но пока этого достаточно . это «красные флажки», когда дело касается адаптеров.
И, если вы действительно хотели оптимизировать для производительности, стоят тестировать более крупные буферы, чтобы увидеть, что она делает вещи быстрее или нет.
Вы пробовали MD5-файл NPM пакет и получите некоторую производительность
Поскольку разница может быть в самом конце файлов, я полагаю, что вычисление хэша файлов является наиболее (но дорогостоящим) простым и безопасным процессом.
Вы попробовали пакет npm MD5-File и получили некоторые показатели производительности?
Конечно, существуют библиотеки, которые делают это, и file-sync-cmp очень популярные (270 тыс. загрузок в неделю). Сравнение выполняется самым простым способом, чтение одинакового количества байтов из двух файлов в разных буферах, а затем побайтное сравнение буферов.
Также есть еще более современная библиотека, FileCompare, используя родные обещания и
Используйте бесплатный онлайн инструмент Code Diff для сравнения двух текстовых файлов.
С помощью этого инструмента можно легко выделить различия между двумя текстами. Инструмент очень легко используется. В отдельных блоках введите два текста и получите результат внизу. Инструмент наглядно отобразит различия между двумя текстовыми областями, выделяя измененные части красным цветом. Вы можете сами выбрать метод сравнения текстов (посимвольно, пословно и построчно).
Инструмент используется, чтобы показать различия между двумя версиями одного и того же файла. Современные реализации поддерживают также двоичные файлы. Вывод называется "diff", или патч, так как он может быть применен с программой patch (программная утилита Unix).
Diff-утилита была разработана в начале 1970-х годов для операционной системы Unix. Финальная версия была полностью разработана Дугласом Макилроем. Алгоритм стал известен как алгоритм Ханта-Макилроя.
Модификации с 1975 года включают улучшение основного алгоритма, добавление новых ключей команды и новые форматы вывода. Базовый алгоритм описывается в книгах Юджина В. Майерса "An O(ND) Difference Algorithm and its Variations" и в книге "A File Comparison Program" Вебба Миллера и Майерса. Алгоритм был независимо разработан и описан Е. Укконеном в "Algorithms for Approximate String Matching". Первые версии программы diff были разработаны для сравнения строк текстовых файлов, рассчитывая, что символ новой строки разделит строки. В 1980-х годах поддержка двоичных файлов привела к изменениям в разработке и реализации программы.
Собственное сравнение
Как насчет случая, когда вы хотите сравнить два фрагмента кода из внешних источников? Вы тоже можете это сделать! Просто запустите Find Action с помощью Ctrl + Shift + A и затем найдите опцию Open Blank Diff Window в контекстном меню.
Откроется новое окно сравнения с пустыми обеими панелями, так что вы сможете скопировать и вставить оба фрагмента для сравнения.
Почему использовать инструмент Code Diff?
Сейчас очень распространено явление, когда люди копируют текст из одного сайта и публикуют его как свой собственный контент, что непрофессионально и называется плагиатом (plagiarism). Этот инструмент поможет вам избегать плагиата. Необходимо скопировать два текста, и инструмент покажет, в каких частях есть плагиат. Учитывайте также, что контент с плагиатом приносит меньше трафика. Если ваш контент можно найти на других сайтах, это приносит меньше трафика, так как вы не обеспечиваете хороший контент для посетителей.
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 5 лет назад .
Какие есть программы для быстрого сравнения двух файлов JavaScript, HTML, CSS, аналогично VCS-системам? То есть, передаёшь два файла, а программа показывает, чем они отличаются, и в каких строках. Но для любых локальных файлов, без какой-то централизованной системы и установки.
Быстрее и удобнее сразу сравнивать файлы в том же текстовом редакторе/IDE, которым Вы пользуетесь, без установки дополнительных программ. В Sublime Text 3 мне пока не доводилось наблюдать сбоев в работе служащего для этой цели плагина SublimeFileDiffs. Спасибо.
Если под Linux, то идеально подходит встроенная утилита diff.
Советую посмотреть в сторону Winmerge
1) Софт только для Windows (ув-мый ТС не указал свою ОС). // 2) Разработка прекратилась, см. неутешительную статистику багтрекера.
- Когда просите посоветовать программу, всегда указывайте свою операционную систему.
- Здесь подобные вопросы закрываются, специально для них служит сайт Software Reccomendations.
Быстрее и удобнее не открывать лишний раз сторонние программы, а когда всё и сразу совершается в одном редакторе/IDE.
Сравнение файлов проекта
Допустим, в вашем проекте есть два похожих файла, и вам нужно сравнивать их построчно. С IDEA это очень просто. Просто выберите оба файла в окне вашего проекта (удерживая Ctrl для множественного выбора).
Теперь у вас есть два варианта:
- Щелкните правой кнопкой мыши один из файлов и выберите в меню опцию «Compare Files».
- Нажмите Ctrl + D
После чего открывается новое окно, которое содержит две панели, в каждой из которых отображается содержимое одого файла. Это очень похоже на diff в системах контроля версий, таких как Git.
Каждое отличие имеет цветовую кодировку:
- Отсутствие окраски означает, что содержание одинаково
- Синий означает наличие изменений в той же строке
- Зеленый означает новый контент
- Серый означает удаленный контент
Вы можете нажать иконки со стрелками » и «, чтобы применить конкретное изменение из одного файла в другой.
Cравнение работает и для изображений, хотя вы не можете видеть и использовать индивидуальные различия.
Сравнить с использованием VCS
Если вы используете систему контроля версий (VCS), у вас есть еще несколько вариантов сравнения. Например, если вы используете Git, вы можете перейти к VCS → Git или щелкнуть правой кнопкой мыши на вашем редакторе и выбрать Git. Теперь вы можете:
- Сравнить с той же версией репозитория: сравнивает текущий локальный файл с версией в вашем удаленном репозитории
- Сравнить с веткой: сравнивает локальный файл с тем же файлом в другой ветке
- Показать историю: сравнивает локальный файл с его предыдущими версиями
Сравнение папок
Сравнение работает не только для отдельных файлов, но и для целых каталогов. Процесс такой же, как и для файлов — просто выберите две папки в окне вашего проекта и нажмите Ctrl + D или щелкните правой кнопкой мыши и выберите Compare Directories в контекстном меню.
Здесь вы можете увидеть список всех файлов, присутствующих в обоих или в одном из каталогов. Вы можете легко определить, какие файлы присутствуют только в одной папке, а какие в обеих. Файлы в обоих папках вы можете сравнить, как обычно.
Решения для Sublime Text 3
Синхронизация папок
Инструмент сравнения каталогов полезен не только для выявления различий в обоих каталогах, но и для синхронизации изменений. Вы можете применить изменения для отдельных разделов каждого файла, как обычно. Но вы также можете пометить файлы, присутствующие только в одном из каталогов, для сохранения или синхронизации с другим каталогом. Вы можете изменить желаемое действие для каждого файла в столбце *. Как только вы закончили свой выбор, вы можете нажать либо Synchronize selected, либо Synchronize all для выполения нейобходимой синхронизации.
Сравнение с буфером обмена
Возможно, у вас есть файл в вашем проекте, и вам нужно сравнить его с некоторым внешним контентом, который не сохраняется как файл на вашем компьютере. Может быть, это фрагмент кода из Интернета, например, с сайта stackoverflow.
Во-первых, вам нужно открыть файл из вашего проекта в вашем редакторе. Затем скопируйте в буфер обмена фрагмент, который вы хотите сравнить (Ctrl + C).
Теперь у вас есть два варианта. Либо сравните весь файл с буфером обмена, либо сравнить выделенный текст.
- Если вы хотите, чтобы весь файл сравнивался, просто щелкните правой кнопкой мыши в любом месте редактора и выберите «Compare with Clipboard» в контекстном меню.
- Если вы хотите сравнить только выделенный текст, сначала выберите какой-то фрагмент файла, а затем щелкните правой кнопкой мыши, как и раньше.
Быстрое
Плагин FileDiffs, документация там же, по ссылке.
Выделяются сами различия между файлами и приводятся номера строк — лично мне этого вполне хватает.
Сравнение с файлом вне проекта
Второй пример, когда вам нужно сравнить файл из вашего проекта с другим файлом вне его.
Процесс очень похож на описанный выше. Выберите один файл в окне вашего проекта и:
- Щелкните правой кнопкой мыши один из файлов и выберите в меню опцию «Compare With. »
- Нажмите Ctrl + D
Последний шаг — поиск внешнего файла для сравнения. Далее сравнение происходит так же, как и в примере выше.
Продвинутое
Плагин Sublimerge 3, инструкция по установке в конце страницы. Он Freemium, но если не желаете отдавать деньги, придётся только иногда (достаточно нечасто) терпеть всплывающее окно с предложением его купить. Пример работы:
Из преимуществ отметил бы возможность интеграции с системами контроля версий SVN, Git и Mercurial (Bazaar пока не поддерживается). Например, чтобы сравнить файл в локальном хранилище с любой из его версий на удалённом репозитории, необходимо кликнуть где-нибудь в тексте этого файла правой кнопкой мыши, в появляющемся контекстном меню Sublimerge → Compare to revision. → выбираем требуемую версию для сравнения.
Значит, пробую в веб-проекте прикрутить jQuery File Upload, все делаю через API.
Дошел до момента, когда в javascript-переменную (массив) добавляю File Object, но перед этим необходимо проверить, нет ли такого объекта в массиве.
К сожалению метод JSON.stringify для File Object и операция сравнения (==) не работают.
А зачем вам это нужно? Что бы пользователь не мог загрузить один и тот же файл дважды? А почему его нужно так ограничивать?
В любом случае, если у двух файлов одинаковое название и одинаковый размер файлов, с очень большой долей вероятности это один и тот же файл. Либо копия файла находящаяся в другой директории.
По хорошему это лишняя проверка, если только для этого нету веских оснований.
а File Object из себя представляет объект js ?
в Javascript-е объекты равны только тогда - когда это один и тот же объект. Больше никогда.
IndexOf пробовал, не работает. Временное решение: действительно, проверять по имени файла. В идеале, файлы могут иметь одинаковое название и размер (при этом быть разными), но лежать в разных папках, а сервер после приема этих файлов сам должен решать, что делать (переименовывать например). Мне бы хватило полного пути к файлу, но такого свойства в объекте я не нашел. Сейчас нашел и вкуриваю Чтение файлов в JavaScript с помощью API файлов
Получить полный путь файла вы не сможете из соображений безопасности. Так же вы не сможете выполнить сравнение содержимого файлов на клиенте. Если вы боитесь, что файлы с одинаковыми именами и размером — разные по содержанию, сравните еще lastModifiedDate. Если у вас паранойя — сравните файлы на сервере))
в таком случае вы можете спокойно проверять по имени файла и его размеру. Но я бы посоветовал спросить пользователя. Мне бы не понравилось поведение при котором программа удалила какие-то мои данные в форме без моего ведома.
При желании, пользователь всё равно может обойти ваше ограничение. Например, сделав копию файла и назвав её иначе. Если действительно нужно защититься от дубляжей, то вам поможет только сравнение размера и md5 хешей файлов на бекенде.
Тут дело не в безопасности так сказать, а в заливке фотографий. Как известно, фотоапараты именую файлы как img000001,img000002 и так далее. Тоесть может быть два img000001 но с разных фотосесий
Возможно сравнить, используя FileReader, прочитав файл как массив, с помощью readAsArrayBuffer
Туториал от html5rocks (правда там читают как строку)
От переводчика: В блоге Войтеха Рузички по программированию имеется 13 постов с тегом IDEA. Один из был переведен и опубликован на Хабре — Лучшие плагины IntelliJ IDEA. Он оказася довольно популярен и я решил попробовать перевести и другие посты об IDEA. Надеюсь будут полезны для вас.
IntelliJ IDEA предлагает множество способов сравнения файлов, папок и фрагментов кода и даже синхронизации содержимого папок.
Читайте также: