20240402
This commit is contained in:
113
anbs_cp/Extensions/FileExtensions.cs
Normal file
113
anbs_cp/Extensions/FileExtensions.cs
Normal 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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user