20230201
This commit is contained in:
parent
9afdd62f24
commit
63b5cfeed8
37
anbs_cp/Classes/Exceptions/RenameException.cs
Normal file
37
anbs_cp/Classes/Exceptions/RenameException.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
namespace anbs_cp.Classes.Exceptions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-исключение для переименования папок/файлов
|
||||||
|
/// </summary>
|
||||||
|
public sealed class RenameException : Exception
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Имя файла/папки
|
||||||
|
/// </summary>
|
||||||
|
public string FileName { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Описание ошибки
|
||||||
|
/// </summary>
|
||||||
|
public string? ErrorMessage { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">Имя файла/папки</param>
|
||||||
|
/// <param name="errorMessage">Описание ошибки</param>
|
||||||
|
public RenameException(string fileName, string? errorMessage) : base(GetMessage(fileName, errorMessage ?? string.Empty))
|
||||||
|
{
|
||||||
|
FileName = fileName;
|
||||||
|
ErrorMessage = errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение текстового представление ошибки
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">Имя файла/папки</param>
|
||||||
|
/// <param name="errorMessage">Описание ошибки</param>
|
||||||
|
/// <returns>Текстовое представление ошибки</returns>
|
||||||
|
private static string GetMessage(string fileName, string errorMessage) =>
|
||||||
|
$"При переименовании файла/папки {fileName} возникла следующая ошибка: {errorMessage}";
|
||||||
|
}
|
@ -1,4 +1,7 @@
|
|||||||
namespace anbs_cp.Classes;
|
using anbs_cp.Classes.Exceptions;
|
||||||
|
using anbs_cp.Enums;
|
||||||
|
|
||||||
|
namespace anbs_cp.Classes;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
|
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
|
||||||
@ -30,4 +33,115 @@ public static class LikeDelphi
|
|||||||
/// <param name="delimiter">Символ-делитель строки</param>
|
/// <param name="delimiter">Символ-делитель строки</param>
|
||||||
/// <returns>Массив строк</returns>
|
/// <returns>Массив строк</returns>
|
||||||
public static List<string> ParseString (string str, char delimiter) => str.Split(delimiter).ToList();
|
public static List<string> ParseString (string str, char delimiter) => str.Split(delimiter).ToList();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Переименовываю файл
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="oldName">Старое имя файла (с полным путём)</param>
|
||||||
|
/// <param name="newName">Новое имя файла (с полным путём)</param>
|
||||||
|
/// <param name="ifExist">Что делать, если существует</param>
|
||||||
|
/// <exception cref="RenameException">Если <paramref name="ifExist" /> имеет значение <value>RaiseException</value>, то генерируется ошибка переименования файла</exception>
|
||||||
|
public static void RenameFile (string oldName, string newName,
|
||||||
|
EOnExistAction ifExist = EOnExistAction.RaiseException)
|
||||||
|
{
|
||||||
|
//Если целевой файл существует
|
||||||
|
if (File.Exists(newName))
|
||||||
|
switch (ifExist)
|
||||||
|
{
|
||||||
|
//Возбуждать исключение
|
||||||
|
case EOnExistAction.RaiseException:
|
||||||
|
throw new RenameException(newName, "Файл уже существует!");
|
||||||
|
//Прерываю
|
||||||
|
case EOnExistAction.Abort:
|
||||||
|
return;
|
||||||
|
//Игнорирую и перезаписываю файл
|
||||||
|
case EOnExistAction.Ignore:
|
||||||
|
break;
|
||||||
|
//Только для папок (для файлов равносилен RaiseException)
|
||||||
|
case EOnExistAction.RaiseExceptionIfNotEmpty:
|
||||||
|
throw new RenameException(newName, "Файл уже существует!");
|
||||||
|
//Только для папок (для файлов равносилен Abort)
|
||||||
|
case EOnExistAction.AbortIfNotEmpty:
|
||||||
|
return;
|
||||||
|
//по умолчанию - RaiseException
|
||||||
|
default:
|
||||||
|
throw new RenameException(newName, "Файл уже существует!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Перемещаю файл
|
||||||
|
File.Move(oldName, newName, true);
|
||||||
|
|
||||||
|
//Если начальный файл существует
|
||||||
|
if (File.Exists(oldName))
|
||||||
|
//- удаляю его
|
||||||
|
File.Delete(oldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление папки
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dir">Папка</param>
|
||||||
|
public static void RemoveDir (string dir) => Directory.Delete(dir, true);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Проверяет папку на пустоту
|
||||||
|
/// Оригинальный ответ от OwenGlendower (https://www.cyberforum.ru/windows-forms/thread1995240.html)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dir">Проверяемая папка</param>
|
||||||
|
/// <returns>Пуста (<value>true</value>) или не пуста (<value>false</value>) папка <see cref="dir"/></returns>
|
||||||
|
public static bool IsDirEmpty (string dir) => !Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories).Any();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Переименовывает папку
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="oldName">Старое имя папки (с полным путём)</param>
|
||||||
|
/// <param name="newName">Новое имя папки (с полным путём)</param>
|
||||||
|
/// <param name="ifExist">Что делать, если существует</param>
|
||||||
|
/// <exception cref="RenameException">Если <paramref name="ifExist" /> имеет значение <value>RaiseException</value>, то генерируется ошибка переименования папки</exception>
|
||||||
|
public static void RenameDir (string oldName, string newName,
|
||||||
|
EOnExistAction ifExist = EOnExistAction.RaiseException)
|
||||||
|
{
|
||||||
|
//Если целевая папка существует
|
||||||
|
if (Directory.Exists(newName))
|
||||||
|
{
|
||||||
|
switch (ifExist)
|
||||||
|
{
|
||||||
|
//Возбуждать исключение
|
||||||
|
case EOnExistAction.RaiseException:
|
||||||
|
throw new RenameException(newName, "Папка уже существует!");
|
||||||
|
//Прерывать
|
||||||
|
case EOnExistAction.Abort:
|
||||||
|
return;
|
||||||
|
//Игнорировать и перезаписывать папку
|
||||||
|
case EOnExistAction.Ignore:
|
||||||
|
break;
|
||||||
|
//Возбуждать исключение, если не пустая
|
||||||
|
case EOnExistAction.RaiseExceptionIfNotEmpty:
|
||||||
|
if (!IsDirEmpty(newName))
|
||||||
|
throw new RenameException(newName, "Папка уже существует и не пуста!");
|
||||||
|
|
||||||
|
break;
|
||||||
|
//Прерывать, если не пустая
|
||||||
|
case EOnExistAction.AbortIfNotEmpty:
|
||||||
|
if (!IsDirEmpty(newName))
|
||||||
|
return;
|
||||||
|
|
||||||
|
break;
|
||||||
|
//по умолчанию - RaiseException
|
||||||
|
default:
|
||||||
|
throw new RenameException(newName, "Папка уже существует!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Удаляю целевую папку
|
||||||
|
RemoveDir(newName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Перемещаю папку
|
||||||
|
Directory.Move(oldName, newName);
|
||||||
|
|
||||||
|
//Если начальная папка существует
|
||||||
|
if (Directory.Exists(oldName))
|
||||||
|
//- удаляю его
|
||||||
|
RemoveDir(oldName);
|
||||||
|
}
|
||||||
}
|
}
|
32
anbs_cp/Enums/EOnExistAction.cs
Normal file
32
anbs_cp/Enums/EOnExistAction.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
namespace anbs_cp.Enums;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Действия при операции переименования, если файл существует
|
||||||
|
/// </summary>
|
||||||
|
public enum EOnExistAction
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Возбуждать исключение
|
||||||
|
/// </summary>
|
||||||
|
RaiseException = 0,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прервать операцию
|
||||||
|
/// </summary>
|
||||||
|
Abort = 1,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Продолжить операцию
|
||||||
|
/// </summary>
|
||||||
|
Ignore = 2,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возбуждать исключение, если папка не пуста (только для папок)
|
||||||
|
/// </summary>
|
||||||
|
RaiseExceptionIfNotEmpty = 3,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прервать операцию, если папка не пуста (только для папок)
|
||||||
|
/// </summary>
|
||||||
|
AbortIfNotEmpty = 4
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<Version>2023.129.0</Version>
|
<Version>2023.201.0</Version>
|
||||||
<Authors>Alexander Babaev</Authors>
|
<Authors>Alexander Babaev</Authors>
|
||||||
<Product>ANB Software Components Pack</Product>
|
<Product>ANB Software Components Pack</Product>
|
||||||
<Description>Library of some useful functions in C# language.</Description>
|
<Description>Library of some useful functions in C# language.</Description>
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RA/@EntryIndexedValue">RA</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RA/@EntryIndexedValue">RA</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RAM/@EntryIndexedValue">RAM</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RAM/@EntryIndexedValue">RAM</s:String>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=anbs/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=anbs/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Glendower/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0435_0440_043D_0451_043C/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0435_0440_043D_0451_043C/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0438_0434_0435_043E_043A_0430_0440_0442_0430/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0438_0434_0435_043E_043A_0430_0440_0442_0430/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_041F_0430_0440_0441_0435_0440/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_041F_0430_0440_0441_0435_0440/@EntryIndexedValue">True</s:Boolean>
|
||||||
@ -13,6 +14,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0432_0438_0434_0435_043E_043A_0430_0440_0442_0435/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0432_0438_0434_0435_043E_043A_0430_0440_0442_0435/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0434_0435_0448_0438_0444_0440_043E_0432_0430_043D_0438_044F/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0434_0435_0448_0438_0444_0440_043E_0432_0430_043D_0438_044F/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0438_043C_0451_043D/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0438_043C_0451_043D/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_043F_0443_0442_0451_043C/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442_0447_0438_043A/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442_0447_0438_043A/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0445_044D_0448_0430/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0445_044D_0448_0430/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user