Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проверить файлы на идентичность

85K
08 октября 2012 года
RomOs
2 / / 08.10.2012
Есть задачка: Пусть у нас есть два файла. Нужно проверить не идентичны ли они. Какие методы будут рациональными?

И второй вопрос: нужно ли создавать екземпляр класса, если я буду работать с OpenFileDialog?
412
08 октября 2012 года
grgdvo
323 / / 04.07.2007
Сначала сверить размеры!
Если размер одинаковый, то задачка из разряда O(n), то есть в худшем случае нужно просмотреть все байты обоих файлов, выбирайте на вкус:
1. линейный поиск первого несовпадающего байта
2. плевать на поиск, тупо считаем хеш-суммы
3. берем на угад 10 (100, 1000, % от размера) произвольных байт, сравниваем... вообщем нечто из разряда метода Монте-Карло.
4. строим генетический алгоритм: начальная популяция - пометка произвольных байтов файлов, сравнение по пометке, размножение - приписывание пометки соседним с помеченными элементам, отмирание уже помеченных у предыдущей популяции.
ну можно еще что-нибудь придумать
85K
09 октября 2012 года
RomOs
2 / / 08.10.2012
ну хорошо.... есть код....

 
Код:
if (opDialog_1.ShowDialog() == DialogResult.OK)
            {
              label1.Text = FileInfo(opDialog_1.FileName).Length;
            }
но здесь ерор: Ошибка 1 "System.IO.FileInfo" является "тип", но используется как "переменная"

Сори, у меня азы очень хромают... если можно как узнать размер файла отсюда?

Если переписать код:

 
Код:
if (opDialog_1.ShowDialog() == DialogResult.OK)
            {
                FileInfo f = new FileInfo(opDialog_1.FileName);
                label1.Width = this.Width + 3;
                label1.Text = (f.Length / 1024).ToString();          

            }
Теперь, если выбрать файл - (по проводнике винды 11,8 Кб) мне пишет 11 в лейбе... Как быть?
7
09 октября 2012 года
@pixo $oft
3.4K / / 20.09.2006
Ясен перец!Length наверняка целый тип же.Деля целый на целый,что ты ожидаешь получить?
Пиши в байтах размер.Или ещё что-нибудь придумай(типа f.Length/1024-f.Length\1024)
412
09 октября 2012 года
grgdvo
323 / / 04.07.2007
Цитата: RomOs

 
Код:
if (opDialog_1.ShowDialog() == DialogResult.OK)
            {
                FileInfo f = new FileInfo(opDialog_1.FileName);
                label1.Width = this.Width + 3;
                label1.Text = (f.Length / 1024).ToString();          

            }
Теперь, если выбрать файл - (по проводнике винды 11,8 Кб) мне пишет 11 в лейбе... Как быть?


Этот код верный. Вы создали экземпляр класс FileInfo, отвечающего за получение информации о файле, в частности о его размере. Размер файла возвращается в байтах. Поле Length - целочисленное, операция деления "/" тоже здесь целочисленная. У вас отбрасывается дробная часть. Попробуйте поставить не 1024, а 1024.0, указав тем самым компилятору, что деление будет на вещественное число. Хотя не знаю как C# на это отреагирует, возможно потребуется явное указание, что результат деления должен быть вещественным.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог