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>
|
||||
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
|
||||
@ -10,7 +13,7 @@ public static class LikeDelphi
|
||||
/// </summary>
|
||||
/// <param name="path">Путь, к которому нужно добавить slash</param>
|
||||
/// <returns>Путь со slash в конце</returns>
|
||||
public static string IncludeTrailingBackslash(string path)
|
||||
public static string IncludeTrailingBackslash (string path)
|
||||
{
|
||||
//По умолчанию сохраняем путь
|
||||
string result = path;
|
||||
@ -29,5 +32,116 @@ public static class LikeDelphi
|
||||
/// <param name="str">Строка, которую нужно разбить</param>
|
||||
/// <param name="delimiter">Символ-делитель строки</param>
|
||||
/// <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);
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ public abstract class ValueConverter: IValueConverter
|
||||
{
|
||||
ValueNames = valueNames;
|
||||
Divider = divider;
|
||||
DecimalPlaces = (byte)(decimalPlaces < 3 ? decimalPlaces : 2);
|
||||
DecimalPlaces = (byte)(decimalPlaces < 3 ? decimalPlaces : 2);
|
||||
}
|
||||
|
||||
#region Реализация интерфейса
|
||||
|
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>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<Version>2023.129.0</Version>
|
||||
<Version>2023.201.0</Version>
|
||||
<Authors>Alexander Babaev</Authors>
|
||||
<Product>ANB Software Components Pack</Product>
|
||||
<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/=RAM/@EntryIndexedValue">RAM</s:String>
|
||||
<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_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>
|
||||
@ -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/=_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/=_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_0447_0438_043A/@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