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