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
/// </summary>
// 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 System.Text;
namespace anbs_cp.Extensions;
/// <summary>
@ -33,6 +35,23 @@ public static class FileExtension
public static FileHash GetHash (string 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>
/// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
/// </summary>
@ -40,34 +59,50 @@ public static class FileExtension
/// <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)
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>
/// Читает первую строку из текстового файла <paramref name="fileName"/>
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="useUtf8WithBom">Нужно ли использовать кодировку UTF8 With BOM или UTF8 Without BOM</param>
/// <param name="encoding">Кодировка файла</param>
/// <typeparam name="T">Тип выходных данных</typeparam>
/// <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() ?? "{}";
@ -77,23 +112,29 @@ public static class FileExtension
}
/// <summary>
/// Читает все строки из текстового файла <paramref name="fileName"/>
/// Читает первую строку из текстового файла <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) => 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>
public static IEnumerable<T> ReadAll<T> (string fileName, bool useUtf8WithBom = false)
public static IEnumerable<T> ReadAll<T> (string fileName, Encoding encoding)
{
// Создаю результат
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)
@ -110,4 +151,15 @@ public static class FileExtension
// Возвращаю полученный список
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>
<TargetFramework>net8.0</TargetFramework>
<Version>2024.4.3</Version>
<Version>2024.4.8</Version>
<Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software</Product>
<Description>Библиотека полезных методов языка C#</Description>