// Руками создавать данные для программы, конечно, не стал. А создал генератор данных (генерирует изображения с разными датами создания). Также добавил метод проверки отсортированных данных. Сами изображения без какого-либо смысла. Генерируется их имитация -- простой массив байт с соответствующим именем и расширением.
// К сожалению, ответ может содержать максимум 5000 символов, поэтому весь код написать в ответе не смогу. Напишу только форму. Но я прикрепил текстовые файлы, в которых лежит весь код.
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);
}
}
}
// Остальной код смотри в файлах
2 votes Thanks 1
esstry
Ошибка имя «ISOweek” не существует в текущем контексте. Что нужно сделать?
ЯковПервый
Проверить, что подключен using System.Globalization. Если подключен, то проверить, что выбран NET Core 3.0 или более новая версия. Или NET 6
ЯковПервый
На Framework 4.8, например, такого нет. Там есть GregorianCalendar и метод GetWeekOfYear. Но лучше использовать ISOweek. И в принципе писать на Core или NET, а не на устаревшем Framework
esstry
Можно ли с вами где-то связаться? В телеграмме может. У меня есть вопрос по реализации GregorianCalendar и методу GetWeekOfYear. Пожалуйста @DevushkaBuda
Answers & Comments
// Код под 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);
}
}
}
// Остальной код смотри в файлах
@DevushkaBuda