20240408
This commit is contained in:
parent
aee153d114
commit
0fb4058186
@ -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);
|
||||
}
|
@ -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
|
||||
}
|
83
anbs_cp/Extensions/ListExtensions.cs
Normal file
83
anbs_cp/Extensions/ListExtensions.cs
Normal 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);
|
||||
}
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user