Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение, Содержимое файлов 
V
    Опции темы
GX777
Дата 19.7.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Привет всем!У меня к вам 2 вопроса:
1.Как сравнить файлы по содержимому(для поиска дубликатов файлов).Если есть очень много файлов.
2.Как одним разом сразу вывести список файлов находящихся во всех каталогах(Например вывести список файлов на диске С)
Ведь GetFiles() показывает только список файлов в одном каталоге.А если в этом каталоге кроме файлов есть еще каталоги с вложенными файлами?

P.S.Извините за  сумбурное изложение вопроса)) 
PM MAIL   Вверх
oleeg
Дата 19.7.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Могу помочь по второму вопросу, ибо писал для себя программу, которая выводит список файлов в выбранном каталоге
 
Код

private void buttonStartDIr_Click(object sender, EventArgs e)
        {
                       
            try
            {
                DirectoryInfo dirInfo = new DirectoryInfo(textBoxForDirectories.Text);
                // Получаем список всех папок
                DirectoryInfo[] listOfFIles = dirInfo.GetDirectories();
                // просмотр по всем директориям
                foreach (DirectoryInfo dd in listOfFIles)
                    //Проверяем наличие доступа к каталогу
                    if (dd.Attributes == FileAttributes.Directory)
                    {
                        // получаем список всех файлов из каталога
                        FileInfo[] listFileInfo = dd.GetFiles();
                        // просмотр по всем файлам
                        foreach (FileInfo fi in listFileInfo)
                        {
                            // куда записывать в цикле
                            StreamWriter sw = new StreamWriter("FilesInDirectories.txt");
                            string filesInDir = fi.ToString();
                            // записываем 
                            sw.WriteLine(filesInDir);
                            // закрываем поток
                            sw.Close();
                           // тут уж сам выбери, куда записывать 

                        }
                    }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Exception");
            }
        }

если надо, могу выложить полный код, там просто много наворотов, которые вряд ли тебе нужны
PM MAIL   Вверх
GX777
Дата 19.7.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Спасибо,и этого хватит.
PM MAIL   Вверх
GX777
Дата 19.7.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Код

DirectoryInfo dirInfo = new DirectoryInfo(textBoxForDirectories.Text);

oleeg,не могу понять каким образом у тебя это работает. В учебниках написано что параметром этого конструктора должна  быть папка.Не пашет эта строчка
у меня  
PM MAIL   Вверх
informatik
Дата 19.7.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.11.2007

Репутация: нет
Всего: 6



Цитата

1.Как сравнить файлы по содержимому(для поиска дубликатов файлов).Если есть очень много файлов.


Для этого можно использовать хэш код файлов.

Хэш - это контрольная сумма, уникальная для каждого файла или блока данных. С помощью хэша можно проверить изменялся ли файл с момента создания.

В NET есть несколько хэшалгоритмов без ключа. Для больших файлов лучше использоывать алгоритм с большим размером хэша(512). 
Таковым является алгоритм SHA512. Для малких можно MD5(128 бит) - это будет побыстрее...

Пример вычисления хэша файла:
Код

            //Создание объекта алгоритма
            SHA512 hash = new SHA512Managed();
            //Данные подлежащие хэшированию
            FileStream fs = new FileStream("C:\file.f", FileMode.Open, FileAccess.Read);
            BinaryReader r = new BinaryReader(fs);
            //Расчитать хэш
            hash.ComputeHash(r.ReadBytes((int)fs.Length));



Это сообщение отредактировал(а) informatik - 19.7.2008, 19:55
--------------------
namespace informatik
PM MAIL   Вверх
nikitao
Дата 19.7.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



GX777, а это чем вам не нравится ?

Код

string [] ss= Directory.GetFiles([путь], "*.*", SearchOption.AllDirectories);


зы 

GX777, Вопросы в топике абсолютно разные. По хорошему - это должно быть 2 топика ибо 1 топик = 1 вопрос smile 

Это сообщение отредактировал(а) nikitao - 19.7.2008, 23:21


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
oleeg
Дата 20.7.2008, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Специально переписал для тебя программу
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace FileInfoAboutAllFiles
{
    class Program
    {
        static void Main()
        {
            DirectoryInfo dirInfo = new DirectoryInfo("D:\\");
            // Получаем список всех папок, содержащихся на диске D:\
            DirectoryInfo[] directorya = dirInfo.GetDirectories();
            foreach (DirectoryInfo dd in directorya)
            {
                //Проверяем наличие доступа к каталогу
                if (dd.Attributes == FileAttributes.Directory)
                {
                    // Получаем список всех файлов из каталога
                    FileInfo[] fi = dd.GetFiles();
                    foreach (FileInfo newfi in fi)
                    {
                        Console.WriteLine(newfi.ToString());
                        Console.ReadLine();
                    }

                }

            }
        }
    }
}

GX777
На счет твоего вопроса. Параметром должна быть не папка, а ее АДРЕС, например "D:\\". И тогда должно все работать

PM MAIL   Вверх
nikitao
Дата 20.7.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



oleeg, ваш код показывает только файлы , которые вложены в папки диска D:\. При этом он не показывает файлы , которые лежат на диске D: и файлы , которые лежат с более большей степенью вложенность( к примеуру D:\папка1\папка2\файл_скрылся.bag)


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
informatik
Дата 20.7.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.11.2007

Репутация: нет
Всего: 6



Цитата

2.Как одним разом сразу вывести список файлов находящихся во всех каталогах(Например вывести список файлов на диске С)


Может вот такой вариант:
Класс DirectoryInfo имеет метод - GetFileSystemInfos() возвращающий массиы всех файлов и папок в директории. Каждый элемент массива имеет тип FileSystemInfo который является общим для классов FileInfo и DirectoryInfo.

Отсюда можно написать две процедуры в одной из которых проверять на тип и выполнять ее рекурсивно, а в другой выполянть действия с фалами.
--------------------
namespace informatik
PM MAIL   Вверх
oleeg
Дата 20.7.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Цитата(nikitao @ 20.7.2008,  03:58)
oleeg, ваш код показывает только файлы , которые вложены в папки диска D:\. При этом он не показывает файлы , которые лежат на диске D: и файлы , которые лежат с более большей степенью вложенность( к примеуру D:\папка1\папка2\файл_скрылся.bag)

Странно, не задумывался об этом, да и не нужно было это. ДАлно, надо исправить будет
PM MAIL   Вверх
GX777
Дата 20.7.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Код


        string [] ss= Directory.GetFiles([путь], "*.*", SearchOption.AllDirectories);

nikitao,это именно то что мне надо.Но... Когда ставишь вот так:

Код

string[] ss = Directory.GetFiles("E:\\", "*.*", SearchOption.AllDirectories);

то вылазит ошибка,что типа "Отказано в доступе  "E:\\System Volume Information"".Т.е. у этой папки выставлен атрибут - скрытый.И на этом прога выходит так ничего толком и не сделав.Как мне программно пропустить такие скрытые файлы и папки
PM MAIL   Вверх
informatik
Дата 20.7.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.11.2007

Репутация: нет
Всего: 6



Хмммм.... вы меня игнорируете?.... smile 
--------------------
namespace informatik
PM MAIL   Вверх
nikitao
Дата 20.7.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Цитата(informatik @  20.7.2008,  21:40 Найти цитируемый пост)
Хмммм.... вы меня игнорируете?.... smile  

следующий!  smile 

Да.....насчет прав доступа я не подумал..... Тогда наверно проще всего делать как сказал informatik.

Добавлено через 2 минуты и 41 секунду
Цитата(GX777 @  20.7.2008,  21:10 Найти цитируемый пост)
у этой папки выставлен атрибут - скрытый.И на этом прога выходит так ничего толком и не сделав.Как мне программно пропустить такие скрытые файлы и папки 

Да не. К ней по дэфолту разрешено обращаться только пользователю System. Если добавить админов к достопу , то все начинает работать...


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.