Предмет: Информатика, автор: esstry

Написать программу на c#
Windows form
Пожалуйста

Приложения:

ЯковПервый: Под поиском и удалением дублирующих файлов что имеется в виду? Удалить вообще все одинаковые фотографии или удалить все дубликаты (а одну фотографию оставить)?
esstry: Дублирующие фотографии - это фотографии с одним и тем же названием. Т.е происходит поиск фотографий с одинаковым названием и одинаковым размером файла.

Удалить все дубликаты, а одну оставить
esstry: поиск дублирующих фото должен производиться по всем папкам и подпапкам

Ответы

Автор ответа: ЯковПервый
1

// Код под NET 6

// Неделю определял через стандарт ISOWeek

// Руками создавать данные для программы, конечно, не стал. А создал генератор данных (генерирует изображения с разными датами создания). Также добавил метод проверки отсортированных данных. Сами изображения без какого-либо смысла. Генерируется их имитация -- простой массив байт с соответствующим именем и расширением.

// К сожалению, ответ может содержать максимум 5000 символов, поэтому весь код написать в ответе не смогу. Напишу только форму. Но я прикрепил текстовые файлы, в которых лежит весь код.

// Форма

using System.IO;

using System.Windows.Forms;

namespace WinFormsApp1

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void OpenDirectoryBtn_Click(object sender, EventArgs e)

       {

           var folderBrowserDialog = new FolderBrowserDialog();

           var res = folderBrowserDialog.ShowDialog();

           if (res != DialogResult.OK || string.IsNullOrEmpty(folderBrowserDialog.SelectedPath))

               return;

           DirectoryTextBox.Text = folderBrowserDialog.SelectedPath;

           UpdateDirectoryTreeView();

       }

       private void GenerateTestingDirectoryBtn_Click(object sender, EventArgs e)

       {

           if (!Directory.Exists(DirectoryTextBox.Text))

           {

               MessageBox.Show("Directory not found.");

               return;

           }

           try

           {

               TestingDirectoryGenerator.Generate(DirectoryTextBox.Text);

               UpdateDirectoryTreeView();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message);

           }

       }

       private void DeleteDuplicateFilesBtn_Click(object sender, EventArgs e)

       {

           if (!Directory.Exists(DirectoryTextBox.Text))

           {

               MessageBox.Show("Directory not found.");

               return;

           }

           try

           {

               DirectoryCleaner.DeleteDuplicateFiles(DirectoryTextBox.Text);

               UpdateDirectoryTreeView();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message);

           }

       }

       private void SortFilesBtn_Click(object sender, EventArgs e)

       {

           if (!Directory.Exists(DirectoryTextBox.Text))

           {

               MessageBox.Show("Directory not found.");

               return;

           }

           if (UseSortingByDayCheckBox.Checked == false &&

               UseSortingByWeekCheckBox.Checked == false &&

               UseSortingByYearCheckBox.Checked == false)

           {

               MessageBox.Show("Select at least one sorting option.");

               return;

           }

           var fileSorter = new FileSorter(

               UseSortingByDayCheckBox.Checked,

               UseSortingByWeekCheckBox.Checked,

               UseSortingByYearCheckBox.Checked

           );

           try

           {

               fileSorter.Sort(DirectoryTextBox.Text);

               UpdateDirectoryTreeView();

               if (!fileSorter.CheckSorting(DirectoryTextBox.Text))

                   MessageBox.Show("Sorting not correct.");

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message);

           }

       }

       private void UpdateDirectoryTreeView()

       {

           var workingDir = new DirectoryInfo(DirectoryTextBox.Text);

           var rootNode = new TreeNode(workingDir.Name);

           foreach (var d1 in workingDir.GetDirectories())

           {

               var n1 = new TreeNode($"folder: {d1.Name}");

               foreach (var d2 in d1.GetDirectories())

               {

                   var n2 = new TreeNode($"folder: {d2.Name}");

                   foreach (var d3 in d2.GetDirectories())

                   {

                       var n3 = new TreeNode($"folder: {d3.Name}");

                       foreach (var f3 in d3.GetFiles())

                           n3.Nodes.Add($"file: {f3.Name}");

                       n2.Nodes.Add(n3);

                   }

                   foreach (var f2 in d2.GetFiles())

                       n2.Nodes.Add($"file: {f2.Name}");

                   n1.Nodes.Add(n2);

               }

               foreach (var f1 in d1.GetFiles())

                   n1.Nodes.Add($"file: {f1.Name}");

               rootNode.Nodes.Add(n1);

           }

           foreach (var f in workingDir.GetFiles())

               rootNode.Nodes.Add($"file: {f.Name}");

           DirectoryTreeView.Nodes.Clear();

           DirectoryTreeView.Nodes.Add(rootNode);

       }

   }

}

// Остальной код смотри в файлах

Приложения:

esstry: Спасибо огромное
esstry: Ошибка имя «ISOweek” не существует в текущем контексте. Что нужно сделать?
ЯковПервый: Проверить, что подключен using System.Globalization. Если подключен, то проверить, что выбран NET Core 3.0 или более новая версия. Или NET 6
ЯковПервый: На Framework 4.8, например, такого нет. Там есть GregorianCalendar и метод GetWeekOfYear. Но лучше использовать ISOweek. И в принципе писать на Core или NET, а не на устаревшем Framework
esstry: Можно ли с вами где-то связаться? В телеграмме может. У меня есть вопрос по реализации GregorianCalendar и методу GetWeekOfYear. Пожалуйста
@DevushkaBuda
ЯковПервый: +, написал "Znanija"
Похожие вопросы