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

@@ -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();
}
}