Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 11:33   #11
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Ты не много не так понял. Я бы советовал использовать Dictionary<string, List<string>>.
Алгоритм такой:
1. Получил хэш файла.
2. Смотришь, есть ли в словаре ключ равный полученному хэшу(метод ContainsKey).
- если нету, добавляешь пару <хэш, List<string>()(в котором уже лежит имя файла)
- если есть, то получаешь значение у ключа(метод TryGetValue), полученное значение будет List<string> и добавляешь туда файл.

Потом когда все выполнилось. Ты идешь foreach'ем по словарю. Берешь первую пару, у нее список файлов(т.е. значение пары). Если в нем 1 путь, то файл уникальный, 2 и более - дубликаты.
Hollander вне форума Ответить с цитированием
Старый 07.12.2009, 20:40   #12
Dmytry
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 10
По умолчанию

Спасибо огромное за помощь..все получилось. я таки сделал то, что было нужно
Теперь перехожу к последней задаче - упаковка выбранных файлов в архив GZIP. Вот, вроде как, нашел материал по нему:
msdn.microsoft.com/ru-ru/libr...zipstream.aspx

Планирую выполнять такие действия:
1) отмечаю галочками файлы для упаковки
2) У меня будет создана кнопка "Упаковать в GZIP архив"
3) при ее нажатии файлы упаковываются и, скорее всего, архив будет лежать в той папке, что задавалась с самого начала мной при поиске дубликатов

Сейчас застрял на том ,что не могу почему когда я делаю компрессию, то файл мой после выполнения программы не сжимается
Dmytry вне форума Ответить с цитированием
Старый 07.12.2009, 20:41   #13
Dmytry
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 10
По умолчанию

вот код:
[CODE]Взял пример из выше указанной ссылки и переделал его:
Код:
Код:
using System;
using System.IO;
using System.IO.Compression;

public class GZipTest
{
    private const int buffer_size = 100;

    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
    {
        // Use this method is used to read all bytes from a stream.
        int offset = 0;
        int totalCount = 0;
        while (true)
        {
            int bytesRead = stream.Read(buffer, offset, buffer_size);
            if (bytesRead == 0)
            {
                break;
            }
            offset += bytesRead;
            totalCount += bytesRead;
        }
        return totalCount;
    }

    public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
    {
        // Use this method to compare data from two different buffers.
        if (len1 != len2)
        {
            Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);
            return false;
        }

        for (int i = 0; i < len1; i++)
        {
            if (buf1[i] != buf2[i])
            {
                Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);
                return false;
            }
        }
        Console.WriteLine("All bytes compare.");
        return true;
    }

    public static void GZipCompressDecompress(string filename)
    {
        Console.WriteLine("Test compression and decompression on file {0}", filename);
        FileStream infile;
        try
        {
            // Open the file as a FileStream object.
            infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] buffer = new byte[infile.Length];
            // Read the file to ensure it is readable.
            int count = infile.Read(buffer, 0, buffer.Length);
            if (count != buffer.Length)
            {
                infile.Close();
                Console.WriteLine("Test Failed: Unable to read data from file");
                return;
            }
            infile.Close();
            MemoryStream ms = new MemoryStream();
            // Use the newly created memory stream for the compressed data.
            GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
            Console.WriteLine("Compression");
            compressedzipStream.Write(buffer, 0, buffer.Length);
            // Close the stream.
            compressedzipStream.Close();
            Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length);
            Console.ReadKey();

            
        } // end try
        catch (InvalidDataException)
        {
            Console.WriteLine("Error: The file being read contains invalid data.");
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Error:The file specified was not found.");
        }
        catch (ArgumentException)
        {
            Console.WriteLine("Error: path is a zero-length string, contains only white space, or contains one or more invalid characters");
        }
        catch (PathTooLongException)
        {
            Console.WriteLine("Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.");
        }
        catch (DirectoryNotFoundException)
        {
            Console.WriteLine("Error: The specified path is invalid, such as being on an unmapped drive.");
        }
        catch (IOException)
        {
            Console.WriteLine("Error: An I/O error occurred while opening the file.");
        }
        catch (UnauthorizedAccessException)
        {
            Console.WriteLine("Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.");
        }
        catch (IndexOutOfRangeException)
        {
            Console.WriteLine("Error: You must provide parameters for MyGZIP.");
        }
    }

    public static void Main(string[] args)
    {

        string usageText = @"C:\Копия lngcode12.gz";
        //If no file name is specified, write usage text.
        
            if (File.Exists(usageText))
            {
                GZipCompressDecompress(usageText);
            Console.ReadKey();
        }
    }
}
помогите пожалуйста разобраться
Dmytry вне форума Ответить с цитированием
Старый 08.12.2009, 14:25   #14
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

А суть проблемы?
Hollander вне форума Ответить с цитированием
Старый 08.12.2009, 14:45   #15
Dmytry
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 10
По умолчанию

Суть проблемы в том ,что компрессия не выполняется! То есть после того, как я выполнил компиляцию, мне выдало, что компрессия выполнилась и написан размер файла после компрессии -то есть написано ,что сжатие выполнилось , заходу на диск смотрю свойства этого файла - размер не изменился.Вопрос - почему?
Dmytry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос для склеивание двух текстовых файлов zenner Microsoft Office Word 1 09.10.2009 14:16
Программа для скрытия информации с графических и текстовых файлах (Delphi\C++) Ferrat Помощь студентам 12 04.05.2009 04:25
Выбор компонента для работы с содержимым текстовых файлов[Delphi] sergey31 Помощь студентам 2 28.08.2008 16:53