diff --git a/csharp/Platform.IO/FileHelpers.cs b/csharp/Platform.IO/FileHelpers.cs
index 82cfd59..26de4bc 100644
--- a/csharp/Platform.IO/FileHelpers.cs
+++ b/csharp/Platform.IO/FileHelpers.cs
@@ -7,11 +7,43 @@
namespace Platform.IO
{
+ ///
+ /// Provides a set of helper methods to work with files.
+ /// Предоставляет набор вспомогательных методов для работы с файлами.
+ ///
public static class FileHelpers
{
+ ///
+ /// Reads all the text and returns character array from the file at the .
+ /// Читает весь текст и возвращает массив символов из файла находящегося в .
+ ///
+ ///
+ /// The path to the file, from which to read the character array.
+ /// Путь к файлу, из которого нужно прочитать массив символов.
+ ///
+ ///
+ /// The character array from the file at the .
+ /// Массив символов из файла находящегося в .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static char[] ReadAllChars(string path) => File.ReadAllText(path).ToCharArray();
+ ///
+ /// Reads and returns all structure values from the file at the .
+ /// Считывает и возвращает все значения структур типа из файла находящегося в .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// The path to the file, from which to read structure values array.
+ /// Путь к файлу, из которого нужно прочитать массив значений структур типа .
+ ///
+ ///
+ /// The structure values array.
+ /// Массив значений структур типа .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T[] ReadAll(string path)
where T : struct
@@ -20,6 +52,22 @@ public static T[] ReadAll(string path)
return reader.ReadAll();
}
+ ///
+ /// Reads and returns the first structure value from the file at the .
+ /// Считывает и возвращает первое значение структуры типа из файла находящегося в .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// The path to the file, from which to read the structure value.
+ /// Путь к файлу, из которого нужно прочитать значение структуры типа .
+ ///
+ ///
+ /// The structure value if read from the file at the is successful; otherwise the default structure value.
+ /// Значение структуры типа если чтение из файла находящегося в прошло успешно, иначе значение структуры типа по умолчанию.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T ReadFirstOrDefault(string path)
where T : struct
@@ -28,9 +76,49 @@ public static T ReadFirstOrDefault(string path)
return fileStream?.ReadOrDefault() ?? default;
}
+ ///
+ /// Returns the opened for reading from the file at the if the file exists, not empty and its size is a multiple of the structure size; otherwise .
+ /// Возвращает открытый для чтения из файла находящегося в , если файл существует, не пуст и его размер кратен размеру структуры типа , а иначе .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// The path to the file to validate.
+ /// Путь к проверяемому файлу.
+ ///
+ ///
+ /// A opened for reading in the case of successful check; otherwise .
+ /// открытый для чтения в случае успешной проверки, а иначе .
+ ///
+ ///
+ /// The size of the file at the is not a multiple of the required .
+ /// Размер файла находящегося в не кратен требуемому .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static FileStream GetValidFileStreamOrDefault(string path) where TStruct : struct => GetValidFileStreamOrDefault(path, Structure.Size);
+ ///
+ /// Returns the opened for reading from the file at the if the file exists, not empty and its size is a multiple of the required ; otherwise .
+ /// Возвращает открытый для чтения из файла находящегося в , если файл существует, не пуст и его размер кратен , а иначе .
+ ///
+ ///
+ /// The path to the file to validate.
+ /// Путь к проверяемому файлу.
+ ///
+ ///
+ /// Required size of elements located in the file at the .
+ /// Требуемый размер элементов, находящихся в файле находящегося в .
+ ///
+ ///
+ /// A opened for reading in the case of successful check; otherwise .
+ /// открытый для чтения в случае успешной проверки, а иначе .
+ ///
+ ///
+ /// The size of the file at the is not a multiple of the required .
+ /// Размер файла находящегося в не кратен требуемому .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static FileStream GetValidFileStreamOrDefault(string path, int elementSize)
{
@@ -46,6 +134,22 @@ private static FileStream GetValidFileStreamOrDefault(string path, int elementSi
return fileSize > 0 ? File.OpenRead(path) : null;
}
+ ///
+ /// Reads and returns the last structure value from the file at the .
+ /// Считывает и возвращает последнее значение структуры типа из файла находящегося в .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// The path to the structure values.
+ /// Путь к файлу с значениями структур типа .
+ ///
+ ///
+ /// The structure value from the file at the in the case of successful read; otherwise the default structure value.
+ /// Значение структуры типа из файла находящегося в в случае успешного чтения, иначе значение по умолчанию структуры типа .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T ReadLastOrDefault(string path)
where T : struct
@@ -61,6 +165,22 @@ public static T ReadLastOrDefault(string path)
return reader.ReadOrDefault();
}
+ ///
+ /// Writes structure value at the beginning of the file at the .
+ /// Записывает значение структуры типа в начало файла находящегося в .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// The path to the file to be changed or created.
+ /// Путь к файлу, который будет изменён или создан.
+ ///
+ ///
+ /// structure value to be written at the beginning of the file at the .
+ /// Значение структуры типа , записываемое в начало файла находящегося в .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteFirst(string path, T value)
where T : struct
@@ -70,12 +190,48 @@ public static void WriteFirst(string path, T value)
writer.Write(value);
}
+ ///
+ /// Opens or creates the file at the and returns its with append mode and write access.
+ /// Открывает или создает файл находящегося в и возвращает его с режимом дополнения и доступом на запись.
+ ///
+ ///
+ /// The path to the file to open or create.
+ /// Путь к файлу, который нужно открыть или создать.
+ ///
+ ///
+ /// The with append mode and write access.
+ /// с режимом дополнения и доступом на запись.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static FileStream Append(string path) => File.Open(path, FileMode.Append, FileAccess.Write);
+ ///
+ /// Returns the size of file at the if file exists; otherwise 0.
+ /// Возвращает размер файла находящегося в если тот существует, иначе 0.
+ ///
+ ///
+ /// The path to the file to get size.
+ /// Путь к файлу, размер которого нужно получить.
+ ///
+ ///
+ /// Size of file at the if it exists; otherwise 0.
+ /// Размер файла если файл находящийся в существует, либо 0.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static long GetSize(string path) => File.Exists(path) ? new FileInfo(path).Length : 0;
+ ///
+ /// Sets the for the file at the .
+ /// Устанавливает файлу находящемуся в .
+ ///
+ ///
+ /// The path to the file to be resized.
+ /// Путь к файлу, размер которого нужно изменить.
+ ///
+ ///
+ /// The size to assign to the file at the .
+ /// Размер который будет присвоен файлу находящемуся в .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void SetSize(string path, long size)
{
@@ -86,12 +242,48 @@ public static void SetSize(string path, long size)
}
}
+ ///
+ /// Removes all files from the directory at the path .
+ /// Удаляет все файлы из директории находящейся по пути .
+ ///
+ ///
+ /// The path to the directory to be cleaned.
+ /// Путь к директории для очистки.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void DeleteAll(string directory) => DeleteAll(directory, "*");
+ ///
+ /// Removes files from the directory at the path according to the .
+ /// Удаляет файлы из директории находящейся по пути в соотвествии с .
+ ///
+ ///
+ /// The path to the directory to be cleaned.
+ /// Путь к директории для очистки.
+ ///
+ ///
+ /// A search pattern for files to be deleted in the directory at the path .
+ /// Шаблон поиска для удаляемых файлов в директории находящейся по пути .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void DeleteAll(string directory, string searchPattern) => DeleteAll(directory, searchPattern, SearchOption.TopDirectoryOnly);
+ ///
+ /// Removes files from the directory at the path according to the and the .
+ /// Удаляет файлы из директории находящейся по пути в соотвествии с и .
+ ///
+ ///
+ /// The path to the directory to be cleaned.
+ /// Путь к директории для очистки.
+ ///
+ ///
+ /// A search pattern for files to be deleted in the directory at the path .
+ /// Шаблон поиска для удаляемых файлов в директории находящейся по пути .
+ ///
+ ///
+ /// A value that determines whether to search only in the current the directory at the path , or also in all subdirectories.
+ /// Значение определяющее искать ли только в текущей директории находящейся по пути , или также во всех субдиректориях.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void DeleteAll(string directory, string searchPattern, SearchOption searchOption)
{
diff --git a/csharp/Platform.IO/StreamExtensions.cs b/csharp/Platform.IO/StreamExtensions.cs
index 235a6d7..c84f700 100644
--- a/csharp/Platform.IO/StreamExtensions.cs
+++ b/csharp/Platform.IO/StreamExtensions.cs
@@ -6,8 +6,28 @@
namespace Platform.IO
{
+ ///
+ /// Provides a set of extension methods for class instances.
+ /// Предоставляет набор методов расширения для эксземпляров класса .
+ ///
public static class StreamExtensions
{
+ ///
+ /// Writes a byte sequence that represents the to the and moves the current position of the by the number of written bytes.
+ /// Записывает последовательность байт представляющую типа в поток и перемещает текущую позицию в вперёд на число записанных байт.
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// A stream to write to.
+ /// Поток, в который осуществляется запись.
+ ///
+ ///
+ /// The structure value to be written to the .
+ /// Значение структуры типа которое будет записано в поток .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Write(this Stream stream, T value)
where T : struct
@@ -16,6 +36,22 @@ public static void Write(this Stream stream, T value)
stream.Write(bytes, 0, bytes.Length);
}
+ ///
+ /// Reads a byte sequence that represents the structure value and moves the current position of the by the number of read bytes.
+ /// Считывает последовательность байт представляющих значение структуры типа и перемещает текущую позицию в потоке вперёд на число прочитанных байт.
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// A stream containing the structure value.
+ /// Поток, содержащий значение структуры типа .
+ ///
+ ///
+ /// The structure value, if its bytes from the are read; otherwise the default structure value.
+ /// Значение структуры типа , если её байты из потока были прочитаны, иначе значение структуры типа по умолчанию.
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T ReadOrDefault(this Stream stream)
where T : struct
@@ -25,6 +61,22 @@ public static T ReadOrDefault(this Stream stream)
return stream.Read(buffer, 0, size) == size ? buffer.ToStructure() : default;
}
+ ///
+ /// Reads and returns all structure values array from the .
+ /// Прочитывает и возвращает массив всех значений структур типа из потока .
+ ///
+ ///
+ /// The structure type.
+ /// Тип структуры.
+ ///
+ ///
+ /// A stream containing the structure values.
+ /// Поток, содержащий значения структур типа .
+ ///
+ ///
+ /// The structure values array read from the .
+ /// Массив с значениями структур типа , прочитанными из потока .
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T[] ReadAll(this Stream stream)
where T : struct