This commit is contained in:
Александр Бабаев 2024-04-02 07:21:50 +03:00
parent d0ee17c6a5
commit 95bd8fe37f
5 changed files with 127 additions and 42 deletions

View File

@ -10,7 +10,7 @@ namespace anbs_cp.Classes;
/* /*
История версий История версий
Обновлено 2024.03.28 Обновлено 2024.03.28
* Все поля Errors, Warnings и Infos объеденены в одно Messages * Все поля Errors, Warnings и Infos объеденины в одно Messages
* В ActionStateMessage добавлен параметр, определяющий тип: MessageType * В ActionStateMessage добавлен параметр, определяющий тип: MessageType
Обновлено 2024.03.26 Обновлено 2024.03.26
@ -50,7 +50,7 @@ public class ActionState<T>: ISerializable
/// Метод для выбора всех значений для условия /// Метод для выбора всех значений для условия
/// </summary> /// </summary>
// ReSharper disable once StaticMemberInGenericType // ReSharper disable once StaticMemberInGenericType
public static readonly Func<ActionStateMessage, bool> SelectAll = _ => true; public static readonly Func<ActionStateMessage, bool> SelectAll = static _ => true;
#region Методы #region Методы
#region Очистка #region Очистка
@ -59,7 +59,7 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
public void ClearErrors () public void ClearErrors ()
{ {
Clear(message => message.MessageType == EActionStateMessageType.Error); Clear(static message => message.MessageType == EActionStateMessageType.Error);
} }
/// <summary> /// <summary>
@ -67,7 +67,7 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
public void ClearWarnings () public void ClearWarnings ()
{ {
Clear(message => message.MessageType == EActionStateMessageType.Warning); Clear(static message => message.MessageType == EActionStateMessageType.Warning);
} }
/// <summary> /// <summary>
@ -75,7 +75,7 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
public void ClearInfo () public void ClearInfo ()
{ {
Clear(message => message.MessageType == EActionStateMessageType.Information); Clear(static message => message.MessageType == EActionStateMessageType.Information);
} }
/// <summary> /// <summary>
@ -177,17 +177,18 @@ public class ActionState<T>: ISerializable
list.AddRange(Messages); list.AddRange(Messages);
break; break;
case EActionStatePrintArea.ErrorsAndWarnings: case EActionStatePrintArea.ErrorsAndWarnings:
list.AddRange(Messages.Where(message => list.AddRange(Messages.Where(static message =>
message.MessageType is EActionStateMessageType.Error or EActionStateMessageType.Warning)); message.MessageType is EActionStateMessageType.Error or EActionStateMessageType.Warning));
break; break;
case EActionStatePrintArea.ErrorsOnly: case EActionStatePrintArea.ErrorsOnly:
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Error)); list.AddRange(Messages.Where(static message => message.MessageType == EActionStateMessageType.Error));
break; break;
case EActionStatePrintArea.WarningsOnly: case EActionStatePrintArea.WarningsOnly:
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Warning)); list.AddRange(Messages.Where(static message => message.MessageType == EActionStateMessageType.Warning));
break; break;
case EActionStatePrintArea.InfosOnly: case EActionStatePrintArea.InfosOnly:
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Information)); list.AddRange(Messages.Where(static message =>
message.MessageType == EActionStateMessageType.Information));
break; break;
default: default:
throw new ArgumentOutOfRangeException(nameof(area), area, null); throw new ArgumentOutOfRangeException(nameof(area), area, null);

View File

@ -1,31 +0,0 @@
namespace anbs_cp.Classes;
/// <summary>
/// Класс -- расширение для класса File
/// </summary>
public static class FileExtension
{
/// <summary>
/// Получает MIME-тип файла
/// </summary>
/// <param name="filename">Имя файла</param>
/// <returns>MIME-тип файла</returns>
public static string MimeType (string filename) =>
MimeTypes.GetMimeType(filename);
/// <summary>
/// Размер файла в байтах
/// </summary>
/// <param name="fileName">Полное имя и путь к файлу</param>
/// <returns>Размер файла в байтах</returns>
public static long FileSize (string fileName) =>
new FileInfo(fileName).Length;
/// <summary>
/// Получает хэш файла
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <returns>Хэш файла в формате <see cref="FileHash"/></returns>
public static FileHash GetHash (string fileName) =>
new(fileName);
}

View File

@ -0,0 +1,113 @@
using System.Text;
using anbs_cp.Classes;
namespace anbs_cp.Extensions;
/// <summary>
/// Класс -- расширение для класса File
/// </summary>
public static class FileExtension
{
/// <summary>
/// Получает MIME-тип файла
/// </summary>
/// <param name="filename">Имя файла</param>
/// <returns>MIME-тип файла</returns>
public static string MimeType (string filename) =>
MimeTypes.GetMimeType(filename);
/// <summary>
/// Размер файла в байтах
/// </summary>
/// <param name="fileName">Полное имя и путь к файлу</param>
/// <returns>Размер файла в байтах</returns>
public static long FileSize (string fileName) =>
new FileInfo(fileName).Length;
/// <summary>
/// Получает хэш файла
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <returns>Хэш файла в формате <see cref="FileHash"/></returns>
public static FileHash GetHash (string fileName) =>
new(fileName);
/// <summary>
/// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
public static void Write<T> (T data, string fileName, bool useUtf8WithBom = false)
{
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
// Открываю файл для создания или перезаписи
using StreamWriter writer = new(new FileStream(fileName, FileMode.OpenOrCreate), filEncoding);
// Записываю
writer.WriteLine(new NewtonsoftJsonSerializer().Serialize(data));
}
/// <summary>
/// Читает первую строку из текстового файла <paramref name="fileName"/>
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
/// <typeparam name="T">Тип выходных данных</typeparam>
/// <returns>Данные или null</returns>
public static T? Read<T> (string fileName, bool useUtf8WithBom = false)
{
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
// Открываю файл для чтения
using StreamReader reader = new(new FileStream(fileName, FileMode.Open), filEncoding);
// Считываю первую запись
string serialized = reader.ReadLine() ?? "{}";
// Возвращаю конвертированный тип
return new NewtonsoftJsonSerializer().Deserialize<T>(serialized);
}
/// <summary>
/// Читает все строки из текстового файла <paramref name="fileName"/>
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
/// <typeparam name="T">Тип выходных данных</typeparam>
/// <returns>Список данных</returns>
public static IEnumerable<T> ReadAll<T> (string fileName, bool useUtf8WithBom = false)
{
// Создаю результат
List<T> result = [];
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
// Открываю файл для чтения
using StreamReader reader = new(new FileStream(fileName, FileMode.Open), filEncoding);
// Пока есть строки в файле
while (reader.ReadLine() is { } serialized)
{
// - десериализую их
T? data = new NewtonsoftJsonSerializer().Deserialize<T>(serialized);
// - и если они не нулевые
if (data is not null)
// -- то добавляю их в результат
result.Add(data);
}
// Возвращаю полученный список
return result.AsEnumerable();
}
}

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Version>2024.3.29</Version> <Version>2024.4.02</Version>
<Authors>Александр Бабаев</Authors> <Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software</Product> <Product>Набор компонентов ANB Software</Product>
<Description>Библиотека полезных методов языка C#</Description> <Description>Библиотека полезных методов языка C#</Description>

View File

@ -1,4 +1,6 @@
using anbs_cp.Classes; using anbs_cp.Classes;
using anbs_cp.Extensions;
// ReSharper disable LocalizableElement // ReSharper disable LocalizableElement
namespace demo; namespace demo;
@ -15,7 +17,7 @@ public sealed partial class FileHashAndMimeType: Form
openFileDialog.ShowDialog(); openFileDialog.ShowDialog();
} }
private void GetFileHashAndMimeType() private void GetFileHashAndMimeType ()
{ {
if (string.IsNullOrEmpty(fileNameEdt.Text)) if (string.IsNullOrEmpty(fileNameEdt.Text))
{ {