This commit is contained in:
Александр Бабаев 2024-04-08 14:12:22 +03:00
parent aee153d114
commit 0fb4058186
4 changed files with 160 additions and 25 deletions

View File

@ -11,5 +11,5 @@ public static class EncodingExtensions
/// Кодировка UTF8 без Bom /// Кодировка UTF8 без Bom
/// </summary> /// </summary>
// ReSharper disable once InconsistentNaming // ReSharper disable once InconsistentNaming
public static Encoding UTF8WithoutBom (this Encoding encoding) => new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); public static Encoding UTF8WithoutBom (this Encoding encoding) => new UTF8Encoding(false);
} }

View File

@ -1,7 +1,9 @@
using System.Text; // ReSharper disable MemberCanBePrivate.Global
using anbs_cp.Classes; using anbs_cp.Classes;
using System.Text;
namespace anbs_cp.Extensions; namespace anbs_cp.Extensions;
/// <summary> /// <summary>
@ -33,6 +35,23 @@ public static class FileExtension
public static FileHash GetHash (string fileName) => public static FileHash GetHash (string fileName) =>
new(fileName); new(fileName);
#region Write
/// <summary>
/// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="fileName">Имя файла</param>
/// <param name="encoding">Кодировка</param>
public static void Write<T> (T data, string fileName, Encoding encoding)
{
// Открываю файл для создания или перезаписи
using StreamWriter writer = new(new FileStream(fileName, FileMode.OpenOrCreate), encoding);
// Записываю
writer.WriteLine(new NewtonsoftJsonSerializer().Serialize(data));
}
/// <summary> /// <summary>
/// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/> /// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary> /// </summary>
@ -40,34 +59,50 @@ public static class FileExtension
/// <param name="data">Данные</param> /// <param name="data">Данные</param>
/// <param name="fileName">Имя файла</param> /// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param> /// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
public static void Write<T> (T data, string fileName, bool useUtf8WithBom = false) public static void Write<T> (T data, string fileName, bool useUtf8WithBom = false) => Write(data, fileName,
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom());
/// <summary>
/// Записывает все данные из списка <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary>
/// <param name="data">Данные</param>
/// <param name="fileName">Имя файла</param>
/// <param name="encoding">Кодировка файла</param>
/// <typeparam name="T">Тип данных</typeparam>
public static void WriteAll<T> (IEnumerable<T> data, string fileName, Encoding encoding)
{ {
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom();
// Открываю файл для создания или перезаписи // Открываю файл для создания или перезаписи
using StreamWriter writer = new(new FileStream(fileName, FileMode.OpenOrCreate), filEncoding); using StreamWriter writer = new(new FileStream(fileName, FileMode.OpenOrCreate), encoding);
// Записываю // Для каждого элемента списка
writer.WriteLine(new NewtonsoftJsonSerializer().Serialize(data)); foreach (T element in data)
// - записываю его строкой в файл
writer.WriteLine(new NewtonsoftJsonSerializer().Serialize(element));
} }
/// <summary>
/// Записывает все данные из списка <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary>
/// <param name="data">Данные</param>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
/// <typeparam name="T">Тип данных</typeparam>
public static void WriteAll<T> (IEnumerable<T> data, string fileName, bool useUtf8WithBom = false) =>
WriteAll(data, fileName, useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom());
#endregion
#region Read
/// <summary> /// <summary>
/// Читает первую строку из текстового файла <paramref name="fileName"/> /// Читает первую строку из текстового файла <paramref name="fileName"/>
/// </summary> /// </summary>
/// <param name="fileName">Имя файла</param> /// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param> /// <param name="encoding">Кодировка файла</param>
/// <typeparam name="T">Тип выходных данных</typeparam> /// <typeparam name="T">Тип выходных данных</typeparam>
/// <returns>Данные или null</returns> /// <returns>Данные или null</returns>
public static T? Read<T> (string fileName, bool useUtf8WithBom = false) public static T? Read<T> (string fileName, Encoding encoding)
{ {
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom();
// Открываю файл для чтения // Открываю файл для чтения
using StreamReader reader = new(new FileStream(fileName, FileMode.Open), filEncoding); using StreamReader reader = new(new FileStream(fileName, FileMode.Open), encoding);
// Считываю первую запись // Считываю первую запись
string serialized = reader.ReadLine() ?? "{}"; string serialized = reader.ReadLine() ?? "{}";
@ -77,23 +112,29 @@ public static class FileExtension
} }
/// <summary> /// <summary>
/// Читает все строки из текстового файла <paramref name="fileName"/> /// Читает первую строку из текстового файла <paramref name="fileName"/>
/// </summary> /// </summary>
/// <param name="fileName">Имя файла</param> /// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param> /// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
/// <typeparam name="T">Тип выходных данных</typeparam> /// <typeparam name="T">Тип выходных данных</typeparam>
/// <returns>Данные или null</returns>
public static T? Read<T> (string fileName, bool useUtf8WithBom = false) => Read<T>(fileName,
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom());
/// <summary>
/// Читает все строки из текстового файла <paramref name="fileName"/>
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="encoding">Кодировка файла</param>
/// <typeparam name="T">Тип выходных данных</typeparam>
/// <returns>Список данных</returns> /// <returns>Список данных</returns>
public static IEnumerable<T> ReadAll<T> (string fileName, bool useUtf8WithBom = false) public static IEnumerable<T> ReadAll<T> (string fileName, Encoding encoding)
{ {
// Создаю результат // Создаю результат
List<T> result = []; List<T> result = [];
// Кодировка
Encoding filEncoding =
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom();
// Открываю файл для чтения // Открываю файл для чтения
using StreamReader reader = new(new FileStream(fileName, FileMode.Open), filEncoding); using StreamReader reader = new(new FileStream(fileName, FileMode.Open), encoding);
// Пока есть строки в файле // Пока есть строки в файле
while (reader.ReadLine() is { } serialized) while (reader.ReadLine() is { } serialized)
@ -110,4 +151,15 @@ public static class FileExtension
// Возвращаю полученный список // Возвращаю полученный список
return result.AsEnumerable(); return result.AsEnumerable();
} }
/// <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) =>
ReadAll<T>(fileName, useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom());
#endregion
} }

View File

@ -0,0 +1,83 @@
using System.Text;
namespace anbs_cp.Extensions;
/// <summary>
/// Класс-расширение для List
/// </summary>
public static class ListExtensions
{
/// <summary>
/// Загрузка строк из текстового файла
/// </summary>
/// <param name="list">Список, в который нужно загрузит</param>
/// <param name="fileName">Имя файла, который нужно загрузить</param>
/// <param name="useUtf8WithBom">Использовать кодировку UTF8 With Bom</param>
public static void LoadFromFile (this List<string> list, string fileName, bool useUtf8WithBom = false)
{
// Очищаю список
list.Clear();
// Кодировка
Encoding fileEncoding =
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom();
// Открываю файл для чтения
using StreamReader reader = new(new FileStream(fileName, FileMode.Open), fileEncoding);
// Пока есть строки в файле
while (reader.ReadLine() is { } line)
// - добавляю в список
list.Add(line);
}
/// <summary>
/// Загрузка строк из типизированного файла
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="list">Список, в который нужно загрузит</param>
/// <param name="fileName">Имя файла, который нужно загрузить</param>
/// <param name="encoding">Кодировка файла</param>
public static void LoadFromFile<T> (this List<T> list, string fileName, Encoding encoding)
{
// Очищаю список
list.Clear();
// Добавляю в список загруженные строки
list.AddRange(FileExtension.ReadAll<T>(fileName, encoding));
}
/// <summary>
/// Сохранение списка строк в файл
/// </summary>
/// <param name="list">Список</param>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Использовать кодировку UTF8 With Bom</param>
public static void SaveToFile (this List<string> list, string fileName, bool useUtf8WithBom = false)
{
// Очищаю список
list.Clear();
// Кодировка
Encoding fileEncoding =
useUtf8WithBom ? Encoding.UTF8 : Encoding.UTF8.UTF8WithoutBom();
// Открываю файл для создания или перезаписи
using StreamWriter writer = new(new FileStream(fileName, FileMode.OpenOrCreate), fileEncoding);
// Для каждой строки
foreach (string line in list)
// - записываю её
writer.WriteLine(line);
}
/// <summary>
/// Сохранение списка строк в файл
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="list">Список</param>
/// <param name="fileName">Имя файла</param>
/// <param name="encoding">Кодировка файла</param>
public static void SaveToFile<T> (this List<T> list, string fileName, Encoding encoding) =>
FileExtension.WriteAll(list.AsEnumerable(), fileName, encoding);
}

View File

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