diff --git a/FileSplitter/Classes/Executor.cs b/FileSplitter/Classes/Executor.cs index 3dc210d..3ae38c3 100644 --- a/FileSplitter/Classes/Executor.cs +++ b/FileSplitter/Classes/Executor.cs @@ -23,6 +23,84 @@ internal static class Executor WriteLine(args.Message); } + /// + /// Получение параметров разбиения + /// + /// Парсер параметров + /// Список параметров + public static List GetSplitOptions (ConsoleParamsParser @params) + { + //Создаю результат + List result = new(); + + //Проверяю параметры разбиения + //- отключена ли проверка хэша + if (@params.HasParam("/NoCheckHash")) + result.Add(FileSplitOptions.fsoNoCheckHash); + //- нужно ли удалять исходный файл + if (@params.HasParam("/DeleteSource")) + result.Add(FileSplitOptions.fsoDeleteSourceFileAfterSplit); + //- нужно ли шифровать файл информации + if (@params.HasParam("/EncryptInfoFile")) + result.Add(FileSplitOptions.fsoEncryptInfoFile); + + //Вывожу результат + return result; + } + + /// + /// Получение параметров разбиения + /// + /// Массив параметров + /// Список параметров + public static List GetSplitOptions (string[] @params) + { + ConsoleParamsParser parser = new(@params); + return GetSplitOptions(parser); + } + + /// + /// Получение параметров соединения + /// + /// Парсер параметров + /// Список параметров + public static List GetJoinOptions (ConsoleParamsParser @params) + { + //Создаю результат + List result = new(); + + //Проверяю параметры разбиения + //- отключена ли проверка хэша + if (@params.HasParam("/NoCheckHash")) + result.Add(FileJoinOptions.fjoNoCheckHash); + //- нужно ли удалять исходные файлы + if (@params.HasParam("/DeleteSource")) + result.Add(FileJoinOptions.fjoDeleteSourceFilesAfterJoin); + //- нужно ли дешифровать файл информации + if (@params.HasParam("/DecryptInfoFile")) + result.Add(FileJoinOptions.fjoInfoFileIsEncrypted); + //- нужно ли отключить проверку версии файла информации + if (@params.HasParam("/IgnoreVersion")) + result.Add(FileJoinOptions.fjoIgnoreSupportedScriptVersion); + //- нужно ли отключить проверку объединённого файла на корректность + if (@params.HasParam("/SkipCheck")) + result.Add(FileJoinOptions.fjoSkipCheckJoinedFile); + + //Вывожу результат + return result; + } + + /// + /// Получение параметров соединения + /// + /// Массив параметров + /// Список параметров + public static List GetJoinOptions (string[] @params) + { + ConsoleParamsParser parser = new(@params); + return GetJoinOptions(parser); + } + /// /// Выполняю разбиение /// @@ -52,10 +130,10 @@ internal static class Executor fileInfo.SplitCount); //- получаю ответ - string? userInput = ReadLine(); + string userInput = ReadInput(""); //- проверяю согласие - if (userInput == null || userInput.ToLower() != "y") + if (userInput != "y") //-- и прерываю, если не получил return FsExitCode.ecUserAborted; } @@ -86,10 +164,10 @@ internal static class Executor WriteLine(Localization.MessageJoinAsk, targetFileName); //- получаю ответ - string? userInput = ReadLine(); + string userInput = ReadInput(""); //- проверяю согласие - if (userInput == null || userInput.ToLower() != "y") + if (userInput != "y") //-- и прерываю, если не получил return FsExitCode.ecUserAborted; } @@ -110,13 +188,13 @@ internal static class Executor WriteLine(Localization.InteractiveStartAsk); //Получаю ответ - userInput = ReadLine() ?? string.Empty; + userInput = ReadInput(string.Empty); //Обработано ли решение bool handled = false; //Обрабатываем выбор пользователя - switch (userInput.ToLower()) + switch (userInput) { //Если пользователь выбрал разбиение case "s": @@ -131,6 +209,35 @@ internal static class Executor handled = true; break; } + + //Если пользователь выбрал соединение + case "j": + { + //- то запускаем соединение + FsExitCode joinExitCode = DoJoinInteractive(); + + //- вывожу сообщение + WriteLine(Localization.InteractiveOperationFinish, Localization.ExitCodeNames.First(eCode => eCode.Item1 == joinExitCode).Item2); + + //- указываем на перехват + handled = true; + break; + } + + //Если пользователь выбрал опции + case "o": + { + //- то запускаем опции + FsExitCode optionsExitCode = DoOptionsInteractive(); + + //- вывожу сообщение + WriteLine(Localization.InteractiveOperationFinish, Localization.ExitCodeNames.First(eCode => eCode.Item1 == optionsExitCode).Item2); + + //- указываем на перехват + handled = true; + break; + } + //Если пользователь указал на выход case "e": //- то указываем на перехват @@ -154,7 +261,7 @@ internal static class Executor /// public static FsExitCode DoSplitInteractive () { - //Пользовательский ввод + //Класс локализации string userInput; //Обработан ли ввод @@ -168,7 +275,7 @@ internal static class Executor WriteLine(Localization.InteractiveSplitFileNameAsk); //Считываю имя файла - userInput = ReadLine() ?? string.Empty; + userInput = ReadInput(string.Empty); //Если файл не существует if (!File.Exists(userInput)) @@ -177,7 +284,7 @@ internal static class Executor WriteLine(Localization.InteractiveFileNameNotExist); //- считываю ответ - userInput = ReadLine() ?? string.Empty; + userInput = ReadInput(string.Empty); //- если выбрано не повторять if (userInput.ToLower() != "y") @@ -203,7 +310,7 @@ internal static class Executor WriteLine(Localization.InteractiveSplitTargetDirAsk); //Считываю данные - userInput = ReadLine() ?? string.Empty; + userInput = ReadInput(string.Empty); //Если вместо папки пустое место if (string.IsNullOrWhiteSpace(userInput)) @@ -236,16 +343,13 @@ internal static class Executor WriteLine(Localization.InteractiveSplitPartSizeAsk); //Считываю размер части - userInput = ReadLine() ?? fileSize.ToString(); - - //Задаю размер части - partSize = TypeConverter.StrToInt64(userInput, fileSize); + partSize = ReadInput(fileSize); //Запрашиваю согласие на размер части WriteLine(Localization.InteractiveSplitPartSizeAsk2, converter.Convert(partSize)); //Считываю ответ - userInput = ReadLine() ?? string.Empty; + userInput = ReadInput(string.Empty); //Если согласен, то выхожу из цикла if (userInput.ToLower() == "y") @@ -256,33 +360,200 @@ internal static class Executor WriteLine(Localization.InteractiveSplitPartSizeResult, converter.Convert(partSize)); /* Опции разбиения */ - //Ввожу переменную опций разбиения - List options = new(); - //Запрос опций разбиения WriteLine(Localization.InteractiveSplitOptionsAsk); //Считываю опции разбиения - userInput = (ReadLine() ?? string.Empty).ToLower().Trim(); + userInput = ReadInput(string.Empty); - //Инициализирую список параметров - ConsoleParamsParser @params = new(userInput.Split(' ')); - - //Проверяю параметры разбиения - //- отключена ли проверка хэша - if (@params.HasParam("/NoCheckHash")) - options.Add(FileSplitOptions.fsoNoCheckHash); - //- нужно ли удалять исходный файл - if (@params.HasParam("/DeleteSource")) - options.Add(FileSplitOptions.fsoDeleteSourceFileAfterSplit); - //- нужно ли шифровать файл информации - if (@params.HasParam("/EncryptInfoFile")) - options.Add(FileSplitOptions.fsoEncryptInfoFile); + //Ввожу переменную опций разбиения + List options = GetSplitOptions(userInput.Split(' ')); //Вывожу информацию о выборе параметров WriteLine(Localization.InteractiveSplitOptionsResult, userInput); /* Выполнение разбиения */ + //Вывожу информацию о начале работы + WriteLine(Localization.MessagePleaseWaitToReady); + + //Выполняю операцию return DoSplit(fileName, targetDir, partSize, false, options); } + + /// + /// Интерактивное соединение файла + /// + /// + public static FsExitCode DoJoinInteractive () + { + //Класс локализации + string userInput; + + //Обработан ли ввод + bool isHandled = false; + + /* Имя файла информации о разбиении */ + //Выбор имени файла + do + { + //Запрос имени файла + WriteLine(Localization.InteractiveJoinFileNameAsk); + + //Считываю имя файла + userInput = ReadInput(string.Empty); + + //Если файл не существует + if (!File.Exists(userInput)) + { + //- то запрашиваю действие + WriteLine(Localization.InteractiveFileNameNotExist); + + //- считываю ответ + userInput = ReadInput(string.Empty); + + //- если выбрано не повторять + if (userInput.ToLower() != "y") + //-- то прерываю операцию + return FsExitCode.ecUserAborted; + } + else + { + //В противном случае, считаю ввод корректным + isHandled = true; + } + } while (!isHandled); + + //Ввожу переменную с именем файла + string fileName = userInput; + + //Вывожу информацию о выборе файла + WriteLine(Localization.InteractiveJoinFileNameResult, fileName); + + /* Целевой файл */ + + //Выбор целевого файла + do + { + //Запрос имени файла + WriteLine(Localization.InteractiveJoinTargetFileNameAsk); + + //Считываю имя файла + userInput = ReadInput(string.Empty); + + //Если файл существует + if (File.Exists(userInput)) + { + //- то запрашиваю действие + WriteLine(Localization.InteractiveFileNameExist); + + //- считываю ответ + userInput = ReadInput(string.Empty); + + //- если выбрано не повторять + if (userInput.ToLower() != "y") + //-- то прерываю операцию + return FsExitCode.ecUserAborted; + } + else + { + //В противном случае, считаю ввод корректным + isHandled = true; + } + } while (!isHandled); + + //Ввожу переменную с именем файла + string targetFileName = userInput; + + //Вывожу информацию о выборе целевого файла + WriteLine(Localization.InteractiveJoinTargetFileNameResult, fileName); + + /* Опции соединения */ + //Запрос опций соединения + WriteLine(Localization.InteractiveJoinOptionsAsk); + + //Считываю опции соединения + userInput = ReadInput(string.Empty); + + //Ввожу переменную опций соединения + List options = GetJoinOptions(userInput.Split(' ')); + + //Вывожу информацию о выборе параметров + WriteLine(Localization.InteractiveJoinOptionsResult, userInput); + + /* Выполнение соединения */ + //Вывожу информацию о начале работы + WriteLine(Localization.MessagePleaseWaitToReady); + + //Выполняю операцию + return DoJoin(fileName, targetFileName, false, options); + } + + /// + /// Интерактивные опции + /// + /// + public static FsExitCode DoOptionsInteractive () + { + //Класс локализации + FileSplitterConsoleOptions options = new(); + + //Загружаю опции + options.Load(); + + //Вывожу запрос на изменение настроек + WriteLine(Localization.InteractiveOptionsAsk); + + //Считываю опции + string userInput = ReadInput(string.Empty); + + //Создаю парсер опций + ConsoleParamsParser parser = new(userInput.Split(' ')); + + //Сохраняю опции + //- язык + if (parser.HasParam("language")) + { + //-- получаю значение языка + string language = (parser.GetValue("language") ?? "russian").Trim(new []{'"'}); + + //-- и если файл существует + if (File.Exists($"languages\\{language}.json")) + //--- то устанавливаю его + options.Language = language; + } + + //Вывожу запрос на подтверждение + WriteLine(Localization.InteractiveOptionsConfirm, userInput); + + //Считываю опции + userInput = ReadInput(string.Empty); + + //Если не подтверждено + if (userInput != "y") + //- то прерываю + return FsExitCode.ecUserAborted; + + //Сохраняю опции + options.Save(); + + //Вывожу информацию об успешном сохранении + WriteLine(Localization.InteractiveOptionsResult); + + //Вывожу результат + return FsExitCode.ecAllDone; + } + + /// + /// Чтение строкового значения + /// + /// Значение по умолчанию + /// Ввод пользователя в формате + private static string ReadInput (string defaultValue = "") => (ReadLine() ?? defaultValue).Trim(new[] { '"' }).ToLower(); + + /// + /// Чтение численного значения + /// + /// Значение по умолчанию + /// Ввод пользователя в формате + private static long ReadInput (long defaultValue = 0) => TypeConverter.StrToInt64(ReadLine() ?? defaultValue.ToString(), defaultValue); } \ No newline at end of file diff --git a/FileSplitter/FileSplitter.csproj b/FileSplitter/FileSplitter.csproj index 054744d..e62e398 100644 --- a/FileSplitter/FileSplitter.csproj +++ b/FileSplitter/FileSplitter.csproj @@ -9,7 +9,7 @@ FileSplitter FileSplitter ANB Software File Splitter Console - 2023.04.09 + 2023.04.16 Alexander Babaev ANB Software File Splitter Console App for ANB Software File Splitter. Split and join any file. @@ -28,7 +28,18 @@ - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + diff --git a/FileSplitter/Program.cs b/FileSplitter/Program.cs index 49eafa6..d9960f8 100644 --- a/FileSplitter/Program.cs +++ b/FileSplitter/Program.cs @@ -56,18 +56,7 @@ static int FileSplit4Params (ConsoleParamsParser @params) //- размер части long partSize = TypeConverter.StrToInt64(@params.GetValue("-ps") ?? string.Empty); //- параметры - List options = new(); - - //Проверяю параметры разбиения - //- отключена ли проверка хэша - if (@params.HasParam("/NoCheckHash")) - options.Add(FileSplitOptions.fsoNoCheckHash); - //- нужно ли удалять исходный файл - if (@params.HasParam("/DeleteSource")) - options.Add(FileSplitOptions.fsoDeleteSourceFileAfterSplit); - //- нужно ли шифровать файл информации - if (@params.HasParam("/EncryptInfoFile")) - options.Add(FileSplitOptions.fsoEncryptInfoFile); + List options = Executor.GetSplitOptions(@params); //Получаю параметры консоли bool silent = @params.HasParam("--silent"); @@ -95,24 +84,7 @@ static int FileJoin4Params (ConsoleParamsParser @params) //- имя целевого файла string targetFileName = @params.GetValue("-tfn") ?? string.Empty; //- параметры - List options = new(); - - //Проверяю параметры разбиения - //- отключена ли проверка хэша - if (@params.HasParam("/NoCheckHash")) - options.Add(FileJoinOptions.fjoNoCheckHash); - //- нужно ли удалять исходные файлы - if (@params.HasParam("/DeleteSource")) - options.Add(FileJoinOptions.fjoDeleteSourceFilesAfterJoin); - //- нужно ли дешифровать файл информации - if (@params.HasParam("/DecryptInfoFile")) - options.Add(FileJoinOptions.fjoInfoFileIsEncrypted); - //- нужно ли отключить проверку версии файла информации - if (@params.HasParam("/IgnoreVersion")) - options.Add(FileJoinOptions.fjoIgnoreSupportedScriptVersion); - //- нужно ли отключить проверку объединённого файла на корректность - if (@params.HasParam("/SkipCheck")) - options.Add(FileJoinOptions.fjoSkipCheckJoinedFile); + List options = Executor.GetJoinOptions(@params); //Получаю параметры консоли bool silent = @params.HasParam("--silent"); diff --git a/FileSplitter/help/english.html b/FileSplitter/help/english.html new file mode 100644 index 0000000..ab6d57d --- /dev/null +++ b/FileSplitter/help/english.html @@ -0,0 +1,369 @@ + + + + + + + «ANB Software File Splitter» help + + + + +

+ ANB Software File Splitter +

+

+ Version 0.5 (2023.04.16) +
+ Copyrights © 2023 by Alewxander Babaev. +

+ +
+ + +

Content

+ +
    +
  1. + Description +
  2. +
  3. + License +
  4. +
  5. + How to use: Split file +
  6. +
  7. + How to use: Join Files +
  8. +
  9. + How to use: Application Parameters +
  10. +
  11. + How to use: Console Line Parameters +
  12. +
+ +
+ + +

Description

+

+ ANB Software File Splitter allows you to divide a file into the nth number of files of a given + volume without archiving the data, and then assemble it into a single file, if you need it. +

+ +

+ The program works in two modes: 1) using command line parameters; 2) interactive mode. +

+ +
+ +

END USER LICENSE AGREEMENT (EULA)

+ +

(Version 1.0)

+ +

DEFINITIONS

+ +

+ ANB Software File Splitter (hereinafter referred to as "product") - a program and/or a component of the program + and/or other (game, image, film, etc.), to which this agreement applies. +

+ +

+ End User (hereinafter referred to as "you" or "user") is a person and/or organization that uses the product, + provided under this license. +

+ +

+ Alexander Babaev (hereinafter referred to as "Manufacturer") - the person and/or organization that produced the + product. +

+ +

+ LIMITATIONS +

+ +

+ Some States (districts, regions, states) do not allow the limitation or exclusion of liability for unforeseen + damage. If your country (district, region, state) does not imply limitation or exclusion of liability for + unforeseen damages, then this agreement cannot apply to you. In this case, refuse to use the product. +

+ +

+ Some States (districts, regions, states) do not allow the exclusion of implied warranties. If your country + (district, region, state) does not imply the exclusion of implied warranties that this agreement may not apply + to you. In this case, refuse to use the product. +

+ +

+ SUBJECT OF THE AGREEMENT +

+ +

+ This agreement is concluded between the Manufacturer of the product and the User of the product. This agreement + defines the relationship between the Manufacturer and the User arising from the use of the product. +

+ +

+ LICENSE +

+ +

+ The product is distributed on the principle of "AS-IS" ("AS IS"). The author does not bear ANY RESPONSIBILITY in + case this program causes physical, material or any other harm to you and your computer. You install the product + at your own risk. The manufacturer and/or Distributor does not bear any responsibility for errors, malfunctions + (etc.) caused by the product to your computer. +

+ +

+ You can use this program at your discretion, as well as copy and distribute with a link to the author and the + website "https://babaev-an.ru/". You are prohibited from copying, distributing the product without a link to the + author and the previously specified site. You are prohibited from copying and using the product if the copy of + the product you are installing does not have a link to the author and the previously specified site. You are + prohibited from changing the contents of the product, disassembling, disassembling and modifying the product, + using its components in other programs without the written agreement of the Manufacturer, removing or correcting + any proprietary and/or copyright marks in the product. +

+ +

+ IF YOU DOWNLOAD, COPY THE PRODUCT OR USE IT IN ANY OTHER WAY, YOU HEREBY CONFIRM YOUR AGREEMENT TO COMPLY WITH + THE TERMS OF THIS END USER LICENSE AGREEMENT. IF YOU DO NOT AGREE, DO NOT INSTALL, COPY, OR USE THE PRODUCT. +

+ +

+ COPYRIGHT +

+ +

+ The copyright for all copies of the product belongs to the Manufacturer and is protected by the legislation of + the Russian Federation and a number of other countries. +

+ +

+ LIMITED WARRANTY AND DISCLAIMER +

+ +

+ You are not given any guarantees. All your possible demands, claims and claims (including on quality) will be + UNRECOGNIZED. +

+ +

+ LIMITATION OF LIABILITY +

+ +

+ You are not given any obligations. All your possible requirements will be UNRECOGNIZED. +

+
+ + +

How to use: Split file

+

+ The "File Splitting" operation is used to split a certain file (hereinafter, the source file) into n parts, + given size. It requires the following parameters: +

+ +
    +
  • + -fn="file name" - name of the source file. +
  • +
  • + -td="path" - the folder where the parts of the file will be saved. +
  • +
  • + -ps=«number» - the size of a part of the file in bytes. +
  • +
+ +

+ In interactive mode, the user will be interviewed for each parameter. +

+ +

+ The "File Splitting" operation may contain the following additional splitting parameters: +

+ +
    +
  • + /NoCheckHash - don't check parts for matching checksums. +
  • +
  • + /DeleteSource - after splitting, the source file is deleted. +
  • +
  • + /EncryptInfoFile - whether the information file needs to be encrypted. + ATTENTION! Enabling this parameter obliges you to specify the parameter in the additional + assembly parameters during assembly /DecryptInfoFile. Otherwise, you will get return + code 3 when trying assemble the file. +
  • +
+ +

+ Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode. +

+ +

+ For example, you need to split the C file:\MyFiles\myBigFile.mp4 to 10 MB files and save files + partitions to the C folder:\myFilesSplited\ by deleting the source code, encrypting the split + information file and not giving the user no requests. Then you should run the program in the following way: +

+

+ + FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent + +

+ +
+ + +

How to use: Join Files

+

+ The "Join files" operation connects the file that was previously split using the "Split File" operation. She + demands the following parameters: +

+ +
    +
  • + -ifn="Имя файла" - the name of the file with information about the split. +
  • +
  • + -tfn="Путь" - the file to build the split into. +
  • +
+ +

+ In interactive mode, the user will be interviewed for each parameter. +

+ +

+ The "Join Files" operation may contain the following additional assembly parameters: +

+ +
    +
  • + /NoCheckHash - don't check parts for matching checksums. +
  • +
  • + /DeleteSource - after joining, the split files are deleted. +
  • +
  • + /DecryptInfoFile - whether to decrypt the information file. ATTENTION! + Enabling this parameter obliges you to specify the parameter in the additional splitting parameters when + splitting /EncryptInfoFile. Otherwise, you will get return code 3 when trying + joining the file. +
  • +
  • + /IgnoreVersion - disable checking the version of the information file (NOT RECOMMENDED). +
  • +
  • + /SkipCheck - disable checking the collected file for compliance with the original. +
  • +
+ +

+ Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode. +

+ +

+ For example, you need to merge the file specified by the information + C:\myFilesSplitter\myBigFile.mp4.fsi, to file C:\MyFiles\myBigFile.mp4 by deleting the + split files, decrypting the split information file and disabling checking the collected file for compliance with + the original. Then you should run the program in the following way: +

+

+ + FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck + +

+ +
+ + +

How to use: Application Parameters

+

+ The operation "Application Parameters" allows you to configure application parameters and works only in + interactive mode. It requires the following parameters: +

+ + + + + + + + + + + + + + + + + + +
+ Parameter + + Possible values + + Description + + Example +
+ language + + String (language file name) + + Sets the application language + + language=russian +
+
+ + +

How to use: Console Line Parameters

+

+ To use the program in command line parameters mode, run the program by passing command line parameters in the + format: +

+

+ + FileSplitter [OPERATION] [OPERATION PARAMETERS] [ADDITIONAL PARAMETERS] [SILENT MODE] + +

+ +

+ [OPERATION] can take the following values: +

+ + + +

+ [OPERATION PARAMETERS] and [ADDITIONAL PARAMETERS] are described in the corresponding help sections. +

+ +

+ [SILENT MODE] works only in command line parameters mode and is enabled by specifying: +

+
    +
  • + --silent - the presence of this parameter indicates that no requests should be issued to the + user (the so-called "Silent mode"). +
  • +
+

+ To turn off the silent mode, simply do not specify this parameter. +

+ + + \ No newline at end of file diff --git a/FileSplitter/help/russian.html b/FileSplitter/help/russian.html new file mode 100644 index 0000000..4e31122 --- /dev/null +++ b/FileSplitter/help/russian.html @@ -0,0 +1,372 @@ + + + + + + + Справка по программе «ANB Software Делитель файлов» + + + + +

+ ANB Software Делитель файлов +

+

+ Версия 0.5 (2023.04.16) +
+ Авторские права © 2023, Александр Бабаев. +

+ +
+ + +

Содержание

+ +
    +
  1. + Описание +
  2. +
  3. + Лицензия +
  4. +
  5. + Как использовать: Разделение файлов +
  6. +
  7. + Как использовать: Объединение файлов +
  8. +
  9. + Как использовать: Параметры приложения +
  10. +
  11. + Как использовать: Параметры консольной строки +
  12. +
+ +
+ + +

Описание

+

+ ANB Software Делитель Файлов позволяет разделить файл на n-ое количество файлов заданного + объема без архивации данных, а также потом собрать в единый файл, если вам понадобится. +

+ +

+ Программа работает в двух режимах: 1) с помощью параметров командной строки; 2) интерактивный режим. +

+ +
+ +

ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ (EULA)

+ +

(Версия 1.0)

+ +

ОПРЕДЕЛЕНИЯ

+ +

+ ANB Software File Splitter (далее "продукт") - программа и/или компонент программы и/или другое (игра, + изображение, фильм и т.п.), на которое распространяется данное соглашение. +

+ +

+ Конечный пользователь (далее "вы" или "пользователь") - лицо и/или организация, которое(-ая) использует продукт, + предоставляемый под этой лицензией. +

+ +

+ Александр Бабаев (далее "Производитель") - лицо и/или организация, которое(-ая) произвело продукт. +

+ +

+ ОГРАНИЧЕНИЯ +

+ +

+ В некоторых государствах (районах, областях, штатах) не позволяется ограничение или исключение ответственности + за непредвиденный ущерб. Если ваша страна (район, область, штат) не подразумевает ограничение или исключение + ответственности за непредвиденный ущерб, то данное соглашение не может применяться к вам. В этом случае + откажитесь от использования продукта. +

+ +

+ В некоторых государствах (районах, областях, штатах) не позволяется исключение подразумеваемых гарантий. Если + ваша страна (район, область, штат) не подразумевает исключение подразумеваемых гарантий, то данное соглашение не + может применяться к вам. В этом случае откажитесь от использования продукта. +

+ +

+ ПРЕДМЕТ СОГЛАШЕНИЯ +

+ +

+ Данное соглашение заключается между Производителем продукта и Пользователем продукта. Данное соглашение + определяет отношения между Производителем и Пользователем, возникающие при использовании продукта. +

+ +

+ ЛИЦЕНЗИЯ +

+ +

+ Продукт распространяется по принципу "AS-IS" ("КАК ЕСТЬ"). Автор не несет НИКАКОЙ ОТВЕТСТВЕННОСТИ в случае + нанесения данной программой физического, материального или любого другого вреда вам и вашему компьютеру. Вы на + свой страх и риск устанавливаете продукт. Производитель и/или Распространитель не несет(-ут) никакой + ответственности за ошибки, неисправности (и т.п.), нанесенные продуктом вашему компьютеру. +

+ +

+ Вы можете использовать данную программу на свое усмотрение, а также копировать и распространять со ссылкой на + автора и сайт "https://babaev-an.ru/". Вам запрещается копировать, распространять продукт без ссылки на автора и + указанный ранее сайт. Вам запрещается копирование и использование продукта, если устанавливаемая вами копия + продукта не имеет ссылки на автора и указанный ранее сайт. Вам запрещается изменять содержимое продукта, + разбирать, дизассемблировать и изменять продукт, использовать её компоненты в других программах без письменного + соглашения Производителя, удалять или исправлять в продукте любые знаки о праве собственности и/или авторском + праве на продукт. +

+ +

+ ЕСЛИ ВЫ ЗАГРУЖАЕТЕ, КОПИРУЕТЕ ПРОДУКТ ИЛИ ИСПОЛЬЗУЕТЕ ЕГО КАКИМ-ЛИБО ДРУГИМ СПОСОБОМ, ЭТИМ ВЫ ПОДТВЕРЖДАЕТЕ СВОЕ + СОГЛАСИЕ СОБЛЮДАТЬ УСЛОВИЯ ДАННОГО ЛИЦЕНЗИОННОГО СОГЛАШЕНИЯ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ. ЕСЛИ ВЫ НЕ СОГЛАСНЫ, НЕ + УСТАНАВЛИВАЙТЕ, НЕ КОПИРУЙТЕ И НЕ ИСПОЛЬЗУЙТЕ ПРОДУКТ. +

+ +

+ АВТОРСКОЕ ПРАВО +

+ +

+ Авторское право на все копии продукта принадлежат Производителю и защищено законодательством РФ и ряда других + стран. +

+ +

+ ОГРАНИЧЕННАЯ ГАРАНТИЯ И ПРАВОВАЯ ОГОВОРКА +

+ +

+ Вам не дается никаких гарантий. Все ваши возможные требования, притязания и претензии (в том числе и по + качеству) будут НЕПРИЗНАННЫ. +

+ +

+ ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ +

+ +

+ Вам не дается никаких обязательств. Все ваши возможные требования будут НЕПРИЗНАННЫ. +

+
+ + +

Как использовать: Разделение файлов

+

+ Операция «Разделение файлов» служит для разбиения некоторого файла (далее, исходный файл) на n частей, заданного + размера. Она требует следующих параметров: +

+ +
    +
  • + -fn="Имя файла" - имя исходного файла. +
  • +
  • + -td="Путь" - папка, в которую будут сохранены части файла. +
  • +
  • + -ps=«ЧИСЛО»> - размер части файла в байтах. +
  • +
+ +

+ В интерактивном режиме пользователь будет опрошен по каждому параметру. +

+ +

+ Операция «Разделение файлов» может содержать следующие дополнительные параметры разбиения: +

+ +
    +
  • + /NoCheckHash - не проверять части на совпадение с контрольными суммами. +
  • +
  • + /DeleteSource - после разбиения удаляется исходный файл. +
  • +
  • + /EncryptInfoFile - нужно ли шифровать файл информации. ВНИМАНИЕ! Включение + этого параметра обязывает Вас при сборке указывать в дополнительных параметрах сборки параметр + /DecryptInfoFile. В противном случае, вы словите код возврата 3 при попытке + собрать файл. +
  • +
+ +

+ Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме. +

+ +

+ Например, нужно разбить файл C:\myFiles\myBigFile.mp4 на файлы размером 10 МБайт и сохранить файлы + разбиения в папку C:\myFilesSplited\, удалив исходник, зашифровав файл информации о разбиении и не + выдавая пользователю никаких запросов. Тогда вы должны запустить программу следующим способом: +

+

+ + FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent + +

+ +
+ + +

Как использовать: Объединение файлов

+

+ Операция «Объединение файлов» соединяет разбитый ранее с помощью операции «Разделения файла» файл. Она требует + следующих параметров: +

+ +
    +
  • + -ifn="Имя файла" - имя файла с информацией о разбиении. +
  • +
  • + -tfn="Путь" - файл, в который нужно собрать разбиение. +
  • +
+ +

+ В интерактивном режиме пользователь будет опрошен по каждому параметру. +

+ +

+ Операция «Объединение файлов» может содержать следующие дополнительные параметры сборки: +

+ +
    +
  • + /NoCheckHash - не проверять части на совпадение с контрольными суммами. +
  • +
  • + /DeleteSource - после объединения удаляются файлы разбиения. +
  • +
  • + /DecryptInfoFile - нужно ли дешифровать файл информации. ВНИМАНИЕ! Включение + этого параметра обязывает Вас при разбивке указывать в дополнительных параметрах разбиения параметр + /EncryptInfoFile. В противном случае, вы словите код возврата 3 при попытке + собрать файл. +
  • +
  • + /IgnoreVersion - отключить проверку версии файла информации (НЕ РЕКОМЕНДУЕТСЯ). +
  • +
  • + /SkipCheck - отключить проверку собранного файла на соответствие оригиналу. +
  • +
+ +

+ Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме. +

+ +

+ Например, нужно объединить файл, заданный информацией C:\myFilesSplited\myBigFile.mp4.fsi, в файл + C:\myFiles\myBigFile.mp4, удалив файлы разбиения, дешифровав файл информации о разбиении и отключив + проверку собранного файла на соответствие оригиналу. Тогда вы должны + запустить программу следующим способом: +

+

+ + FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck + +

+ +
+ + +

Как использовать: Параметры приложения

+

+ Операция «Параметры приложения» позволяет настроить параметры приложения и работает только в + интерактивном режиме. Она требует + следующих параметров: +

+ + + + + + + + + + + + + + + + + + +
+ Параметр + + Возможные значение + + Описание + + Пример +
+ language + + Строка (имя файла языка) + + Задаёт язык приложения + + language=russian +
+
+ + +

Как использовать: Параметры консольной строки

+

+ Для использования программы в режиме параметров командной строки запустите программу, передав параметры + командной строки в формате: +

+

+ + FileSplitter [ОПЕРАЦИЯ] [ПАРАМЕТРЫ ОПЕРАЦИИ] [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] [ТИХИЙ РЕЖИМ] + +

+ +

+ [ОПЕРАЦИЯ] может принимать следующие значения: +

+ + + +

+ [ПАРАМЕТРЫ ОПЕРАЦИИ] и [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] описаны в соответствующих разделах справки. +

+ +

+ [ТИХИЙ РЕЖИМ] работает только в режиме параметров командной строки и включается указанием: +

+
    +
  • + --silent - наличие этого параметра указывает, что не должны выдаваться никакие запросы + пользователю (так называемый «Тихий режим»). +
  • +
+

+ Для выключения тихого режима просто не указывайте этот параметр. +

+ + + + \ No newline at end of file diff --git a/FileSplitter/languages/english.json b/FileSplitter/languages/english.json new file mode 100644 index 0000000..e184875 --- /dev/null +++ b/FileSplitter/languages/english.json @@ -0,0 +1,70 @@ +{ + //This file was translated with Yandex Translator (https://translate.yandex.ru/) + //Application Parameters + "AppTitle": "ANB Software File Splitter", + "AppVersion": "Version: {0}", + "AppCopyrights": "Copyrights (C) {0} by Alexander Babaev.", + + //Messages + "MessageNoParametersForSplit": "Split parameters are not set. For information about working with the program, see the file «\\Help\\English.html#ConsoleParams»", + "MessageSplitAsk": "Information about splitting file:\n***{0}\n***Size: {1}\n***File hash: {2}\n***It is assumed to split into {3} parts(s)\nDo you want to start split? [Y|y - yes, any other letter - no]", + "MessageStartSplit": "The splitting of the file {0} into parts of the size {1} and saving them in the directory {2} is started.", + "MessageSplitFilePart": "Processing part {0} of {1}...", + "MessageSplitComplete": "File splitting {0} is complete!", + "MessageHashCheckStart": "Starting check the hash of the splitting", + "MessageHashCheckFail": "Unfortunately, the file \"{0}\" did not pass the hash check!", + "MessageHashCheckComplete": "Hash verification is complete!", + "MessageJoinAsk": "Do you want to start joining file {0}? [Y|y - yes, any other letter - no]", + "MessageStartJoin": "Joining of files specified by the information file {0} into the file {1} has started.", + "MessageJoinUnsupportedFile": "Unfortunately, the version of the information file {0} is not supported!", + "MessageJoinUnknownFile": "Can't read the information file! Maybe it's encrypted?", + "MessageJoinHashError": "Unfortunately, the split files did not pass verification. Perhaps they are damaged?", + "MessageJoinCheckError": "Unfortunately, the joined file did not pass the validation of join. Perhaps there were any mistakes?", + "MessageJoinFilePart": "Processing part {0} of {1}...", + "MessageJoinComplete": "File joining {0} is complete!", + "MessagePleaseWaitToReady": "Please wait. Preparations for the operation are underway. This may take a long time, during which the program may seem to hang.", + + //Interactive mode messages + "InteractiveStartAsk": "Choose one of the actions:\n* S|s - splitting\n* J|j - joining\n* O|o - program's options\n* E|e - exit\nYour choice:", + "InteractiveWrongInput": "Unknown action selected!", + "InteractiveOperationFinish": "The operation is completed! Exit code is: {0}", + "InteractiveFileNameNotExist": "The file does not exist! Repeat file entry? [Y|y - to repeat, any other letter - to abort operation]", + "InteractiveFileNameExist": "The file exists! You need to select a non-existent file! Repeat file entry? [Y|y - to repeat, any other letter - to abort operation]", + + "InteractiveSplitFileNameAsk": "Enter the name of the file to split (or drag it here):", + "InteractiveSplitFileNameResult": "File selected for splitting: {0}", + "InteractiveSplitTargetDirAsk": "Select the folder where you want to save the parts of the file (or leave it empty to use the folder of the split file):", + "InteractiveSplitTargetDirResult": "The split files will be saved in the folder: {0}", + "InteractiveSplitPartSizeAsk": "Enter the size of the part (in bytes):", + "InteractiveSplitPartSizeAsk2": "You have selected the part size {0}. Is everything right? [Y|y - yes, continue; any other letter - no, repeat input]", + "InteractiveSplitPartSizeResult": "Selected part size: {0}", + "InteractiveSplitOptionsAsk": "Enter additional splitting parameters (space separator):", + "InteractiveSplitOptionsResult": "Additional splitting parameters are selected: [{0}]", + + "InteractiveJoinFileNameAsk": "Enter the name of the split information file (or drag it here):", + "InteractiveJoinFileNameResult": "The file selected for the join is: {0}", + "InteractiveJoinTargetFileNameAsk": "Select the name and path to the file to be joined (for example, c:\\myFiles\\myFile.txt ):", + "InteractiveJoinTargetFileNameResult": "The file will be joined: {0}", + "InteractiveJoinOptionsAsk": "Enter additional join parameters (space delimiter):", + "InteractiveJoinOptionsResult": "Additional join parameters selected: [{0}]", + + "InteractiveOptionsAsk": "Enter the program parameters (space delimiter):", + "InteractiveOptionsConfirm": "Program parameters selected:\n{0}\nDo you confirm them? [Y|y - yes, any other letter - to abort]", + "InteractiveOptionsResult": "The parameters are saved! To apply them, you need to restart the program...", + + //Константы размеров + "FileSizeStringsByte": "byte", + "FileSizeStringsKByte": "KByte", + "FileSizeStringsMByte": "MByte", + "FileSizeStringsGByte": "GByte", + "FileSizeStringsTByte": "TByte", + + //Переводы кодов возврата + "ExitCodeNamesAllDone": "Completed successfully", + "ExitCodeNamesInfoVersionUnsupported": "The version of the split information file is not supported", + "ExitCodeNamesInvalidParameters": "Invalid parameters", + "ExitCodeNamesSplitFileHashError": "Error checking the hash sum of split files", + "ExitCodeNamesTargetFileCheckError": "Error checking the integrity of joined file", + "ExitCodeNamesUnknownInfoFile": "Unknown partitioning information file", + "ExitCodeNamesUserAborted": "Aborted by the user" +} \ No newline at end of file diff --git a/FileSplitter/languages/russian.json b/FileSplitter/languages/russian.json new file mode 100644 index 0000000..73e90fd --- /dev/null +++ b/FileSplitter/languages/russian.json @@ -0,0 +1,69 @@ +{ + //Параметры приложения + "AppTitle": "ANB Software Делитель файлов", + "AppVersion": "Версия: {0}", + "AppCopyrights": "Авторские права (C) {0}, Александр Бабаев.", + + //Сообщения + "MessageNoParametersForSplit": "Не заданы параметры разбиения. Информацию о работе с программой смотрите в файле «<папка с программой>\\Help\\Russian.html#ConsoleParams»\"", + "MessageSplitAsk": "Информация о разбиваемом файле:\n***{0}\n***Размер: {1}\n***Хэш файла: {2}\n***Предполагается разбиение на {3} части(-ей)\nВы хотите начать разбиение? [Y|y - да, Любая другая буква/слово/выражение - нет]", + "MessageStartSplit": "Запущено разбиение файла {0} на части размером {1} и сохранением их в директории {2}.", + "MessageSplitFilePart": "Идёт обработка части {0} из {1}...", + "MessageSplitComplete": "Разбиение файла {0} завершено!", + "MessageHashCheckStart": "Начинаю проверку хэша разбиения", + "MessageHashCheckFail": "К сожалению, файл \"{0}\" не прошёл проверку хэша!", + "MessageHashCheckComplete": "Проверка хэша завершена!", + "MessageJoinAsk": "Вы хотите начать сборку файла {0}? [Y|y - да, любая другая буква/слово/выражение - нет]", + "MessageStartJoin": "Запущено объединение файлов, заданных файлом информации {0}, в файл {1}.", + "MessageJoinUnsupportedFile": "К сожалению, версия файла информации {0} не поддерживается!", + "MessageJoinUnknownFile": "Не могу прочитать файл информации! Возможно он зашифрован?", + "MessageJoinHashError": "К сожалению, разделённые файлы не прошли проверку. Возможно они повреждены?", + "MessageJoinCheckError": "К сожалению, объединённый файл не прошли проверку корректности объединения. Возможно были какие-либо ошибки?", + "MessageJoinFilePart": "Идёт обработка части {0} из {1}...", + "MessageJoinComplete": "Объединение файла {0} завершено!", + "MessagePleaseWaitToReady": "Пожалуйста, подождите. Идёт подготовка к операции. Это может занять длительное время, в течении которого программа может казаться зависшей.", + + //Сообщения интерактивного режима + "InteractiveStartAsk": "Выберете одно из действий:\n* S|s - разбиение\n* J|j - объединение\n* O|o - параметры программы\n* E|e - выход\nВаш выбор:", + "InteractiveWrongInput": "Выбрано неизвестное действие!", + "InteractiveOperationFinish": "Операция завершена с кодом: {0}", + "InteractiveFileNameNotExist": "Файл не существует! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]", + "InteractiveFileNameExist": "Файл существует! Нужно выбрать несуществующий файл! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]", + + "InteractiveSplitFileNameAsk": "Введите имя разбиваемого файла (или перетащите его сюда):", + "InteractiveSplitFileNameResult": "Для разбиения выбран файл: {0}", + "InteractiveSplitTargetDirAsk": "Выберете папку, куда следует сохранить части файла (или оставьте пустым, чтобы использовать папку разбиваемого файла):", + "InteractiveSplitTargetDirResult": "Файлы разбиения будут сохранены в папке: {0}", + "InteractiveSplitPartSizeAsk": "Введите размер части (в байтах):", + "InteractiveSplitPartSizeAsk2": "Вы выбрали размер части {0}. Всё правильно? [Y|y - да, продолжить, любая другая буква - нет, повторить ввод]", + "InteractiveSplitPartSizeResult": "Выбран размер части: {0}", + "InteractiveSplitOptionsAsk": "Введите дополнительные параметры разбиения (разделитель - пробел):", + "InteractiveSplitOptionsResult": "Выбраны дополнительные параметры разбиения: [{0}]", + + "InteractiveJoinFileNameAsk": "Введите имя файла информации о разбиении (или перетащите его сюда):", + "InteractiveJoinFileNameResult": "Для сборки выбран файл: {0}", + "InteractiveJoinTargetFileNameAsk": "Выберите имя и путь к собираемому файлу (например, c:\\myFiles\\myFile.txt):", + "InteractiveJoinTargetFileNameResult": "Будет собран файл: {0}", + "InteractiveJoinOptionsAsk": "Введите дополнительные параметры соединения (разделитель - пробел):", + "InteractiveJoinOptionsResult": "Выбраны дополнительные параметры соединения: [{0}]", + + "InteractiveOptionsAsk": "Введите параметры программы (разделитель - пробел):", + "InteractiveOptionsConfirm": "Выбраны параметры программы:\n{0}\nВы их подтверждаете? [Y|y - да, любая другая буква - выход]", + "InteractiveOptionsResult": "Параметры сохранены! Для их применения требуется перезапуск программы...", + + //Константы размеров + "FileSizeStringsByte": "байт", + "FileSizeStringsKByte": "Кб", + "FileSizeStringsMByte": "Мб", + "FileSizeStringsGByte": "Гб", + "FileSizeStringsTByte": "Тб", + + //Переводы кодов возврата + "ExitCodeNamesAllDone": "Успешно завершено", + "ExitCodeNamesInfoVersionUnsupported": "Версия файла информации о разбиении не поддерживается", + "ExitCodeNamesInvalidParameters": "Неверные параметры", + "ExitCodeNamesSplitFileHashError": "Ошибка проверки хэш-суммы разделённых файлов", + "ExitCodeNamesTargetFileCheckError": "Ошибка проверки целостности собираемого файла", + "ExitCodeNamesUnknownInfoFile": "Неизвестный файл информации о разбиении", + "ExitCodeNamesUserAborted": "Прервано пользователем" +} \ No newline at end of file diff --git a/FileSplitterProj.sln.DotSettings b/FileSplitterProj.sln.DotSettings index c9a7ea6..ed7833c 100644 --- a/FileSplitterProj.sln.DotSettings +++ b/FileSplitterProj.sln.DotSettings @@ -1,7 +1,13 @@  + True + True True + True + True + True True True + True True True True diff --git a/FileSplitterShared/Classes/FileSplitterConsoleOptions.cs b/FileSplitterShared/Classes/FileSplitterConsoleOptions.cs new file mode 100644 index 0000000..b0f5bd7 --- /dev/null +++ b/FileSplitterShared/Classes/FileSplitterConsoleOptions.cs @@ -0,0 +1,64 @@ +using Newtonsoft.Json; +using System.Text; + +namespace FileSplitter.Shared.Classes; + +/// +/// Параметры консоли программы +/// +public sealed class FileSplitterConsoleOptions +{ + /// + /// Конструктор + /// + public FileSplitterConsoleOptions () => Language = "russian"; + + /// + /// Язык приложения + /// + public string Language { get; set; } + + /// + /// Сохранение параметров в файл + /// + public void Save () + { + //Открываю файл + StreamWriter writer = new("settings.json", Encoding.UTF8, + new() { Access = FileAccess.Write, Mode = FileMode.Create }); + + //Записываю файл + writer.WriteLine(JsonConvert.SerializeObject(this)); + + //Закрываю файл + writer.Close(); + //Освобождаю память + writer.Dispose(); + } + + /// + /// Загрузка параметров из файла + /// + public void Load () + { + //Если файла опций не существует + if (!File.Exists("settings.json")) + //- то создаём + Save(); + + //Открываю файл + StreamReader reader = new("settings.json", Encoding.UTF8); + + //Читаю файл + FileSplitterConsoleOptions options = + JsonConvert.DeserializeObject(reader.ReadLine() ?? "[]") ?? new(); + + //- закрываю файл + reader.Close(); + //- освобождаю память + reader.Dispose(); + + //Устанавливаю параметры + Language = options.Language; + } +} \ No newline at end of file diff --git a/FileSplitterShared/Classes/FileSplitterLanguage.cs b/FileSplitterShared/Classes/FileSplitterLanguage.cs new file mode 100644 index 0000000..9bf5754 --- /dev/null +++ b/FileSplitterShared/Classes/FileSplitterLanguage.cs @@ -0,0 +1,134 @@ +namespace FileSplitter.Shared.Classes; + +/// +/// Класс json-представления языкового файла программы +/// +public class FileSplitterLanguage +{ + //Параметры приложения + public FileSplitterLanguage() + { + AppTitle = string.Empty; + AppVersion = string.Empty; + AppCopyrights = string.Empty; + MessageNoParametersForSplit = string.Empty; + MessageSplitAsk = string.Empty; + MessageStartSplit = string.Empty; + MessageSplitFilePart = string.Empty; + MessageSplitComplete = string.Empty; + MessageHashCheckStart = string.Empty; + MessageHashCheckFail = string.Empty; + MessageHashCheckComplete = string.Empty; + MessageJoinAsk = string.Empty; + MessageStartJoin = string.Empty; + MessageJoinUnsupportedFile = string.Empty; + MessageJoinUnknownFile = string.Empty; + MessageJoinHashError = string.Empty; + MessageJoinCheckError = string.Empty; + MessageJoinFilePart = string.Empty; + MessageJoinComplete = string.Empty; + MessagePleaseWaitToReady = string.Empty; + InteractiveStartAsk = string.Empty; + InteractiveWrongInput = string.Empty; + InteractiveOperationFinish = string.Empty; + InteractiveFileNameNotExist = string.Empty; + InteractiveFileNameExist = string.Empty; + InteractiveSplitFileNameAsk = string.Empty; + InteractiveSplitFileNameResult = string.Empty; + InteractiveSplitTargetDirAsk = string.Empty; + InteractiveSplitTargetDirResult = string.Empty; + InteractiveSplitPartSizeAsk = string.Empty; + InteractiveSplitPartSizeAsk2 = string.Empty; + InteractiveSplitPartSizeResult = string.Empty; + InteractiveSplitOptionsAsk = string.Empty; + InteractiveSplitOptionsResult = string.Empty; + InteractiveJoinFileNameAsk = string.Empty; + InteractiveJoinFileNameResult = string.Empty; + InteractiveJoinTargetFileNameAsk = string.Empty; + InteractiveJoinTargetFileNameResult = string.Empty; + InteractiveJoinOptionsAsk = string.Empty; + InteractiveJoinOptionsResult = string.Empty; + InteractiveOptionsAsk = string.Empty; + InteractiveOptionsConfirm = string.Empty; + InteractiveOptionsResult = string.Empty; + FileSizeStringsByte = string.Empty; + FileSizeStringsKByte = string.Empty; + FileSizeStringsMByte = string.Empty; + FileSizeStringsGByte = string.Empty; + FileSizeStringsTByte = string.Empty; + ExitCodeNamesAllDone = string.Empty; + ExitCodeNamesInfoVersionUnsupported = string.Empty; + ExitCodeNamesInvalidParameters = string.Empty; + ExitCodeNamesSplitFileHashError = string.Empty; + ExitCodeNamesTargetFileCheckError = string.Empty; + ExitCodeNamesUnknownInfoFile = string.Empty; + ExitCodeNamesUserAborted = string.Empty; + } + + public string AppTitle { get; set; } + public string AppVersion { get; set; } + public string AppCopyrights { get; set; } + + //Сообщения + public string MessageNoParametersForSplit { get; set; } + public string MessageSplitAsk { get; set; } + public string MessageStartSplit { get; set; } + public string MessageSplitFilePart { get; set; } + public string MessageSplitComplete { get; set; } + public string MessageHashCheckStart { get; set; } + public string MessageHashCheckFail { get; set; } + public string MessageHashCheckComplete { get; set; } + public string MessageJoinAsk { get; set; } + public string MessageStartJoin { get; set; } + public string MessageJoinUnsupportedFile { get; set; } + public string MessageJoinUnknownFile { get; set; } + public string MessageJoinHashError { get; set; } + public string MessageJoinCheckError { get; set; } + public string MessageJoinFilePart { get; set; } + public string MessageJoinComplete { get; set; } + public string MessagePleaseWaitToReady { get; set; } + + //Сообщения интерактивного режима + public string InteractiveStartAsk { get; set; } + public string InteractiveWrongInput { get; set; } + public string InteractiveOperationFinish { get; set; } + public string InteractiveFileNameNotExist { get; set; } + public string InteractiveFileNameExist { get; set; } + + public string InteractiveSplitFileNameAsk { get; set; } + public string InteractiveSplitFileNameResult { get; set; } + public string InteractiveSplitTargetDirAsk { get; set; } + public string InteractiveSplitTargetDirResult { get; set; } + public string InteractiveSplitPartSizeAsk { get; set; } + public string InteractiveSplitPartSizeAsk2 { get; set; } + public string InteractiveSplitPartSizeResult { get; set; } + public string InteractiveSplitOptionsAsk { get; set; } + public string InteractiveSplitOptionsResult { get; set; } + + public string InteractiveJoinFileNameAsk { get; set; } + public string InteractiveJoinFileNameResult { get; set; } + public string InteractiveJoinTargetFileNameAsk { get; set; } + public string InteractiveJoinTargetFileNameResult { get; set; } + public string InteractiveJoinOptionsAsk { get; set; } + public string InteractiveJoinOptionsResult { get; set; } + + public string InteractiveOptionsAsk { get; set; } + public string InteractiveOptionsConfirm { get; set; } + public string InteractiveOptionsResult { get; set; } + + //Константы размеров + public string FileSizeStringsByte { get; set; } + public string FileSizeStringsKByte { get; set; } + public string FileSizeStringsMByte { get; set; } + public string FileSizeStringsGByte { get; set; } + public string FileSizeStringsTByte { get; set; } + + //Переводы кодов возврата + public string ExitCodeNamesAllDone { get; set; } + public string ExitCodeNamesInfoVersionUnsupported { get; set; } + public string ExitCodeNamesInvalidParameters { get; set; } + public string ExitCodeNamesSplitFileHashError { get; set; } + public string ExitCodeNamesTargetFileCheckError { get; set; } + public string ExitCodeNamesUnknownInfoFile { get; set; } + public string ExitCodeNamesUserAborted { get; set; } +} \ No newline at end of file diff --git a/FileSplitterShared/Classes/Localization.cs b/FileSplitterShared/Classes/Localization.cs index 93157e0..0a418d8 100644 --- a/FileSplitterShared/Classes/Localization.cs +++ b/FileSplitterShared/Classes/Localization.cs @@ -1,62 +1,117 @@ using FileSplitter.Shared.Enums; +using Newtonsoft.Json; + namespace FileSplitter.Shared.Classes; public static class Localization { + //Содержимое языкового файла + private static readonly FileSplitterLanguage Language; + + /// + /// Конструктор + /// + static Localization() + { + //Создаю опции приложения + FileSplitterConsoleOptions options = new(); + //- и загружаю их + options.Load(); + + //Язык приложения + string language = options.Language; + + //Если файла языка не существует + if (!File.Exists($"languages\\{language}.json")) + //- то используем русский + language = "russian"; + + //Читаю файл + string languageContent = File.ReadAllText($"languages\\{language}.json"); + + //Загружаю парсер + Language = JsonConvert.DeserializeObject(languageContent) ?? new (); + + //Задаю массивы + //- размеров файлов + FileSizeStrings = new[] + { + Language.FileSizeStringsByte, + Language.FileSizeStringsKByte, + Language.FileSizeStringsMByte, + Language.FileSizeStringsGByte, + Language.FileSizeStringsTByte + }; + + //- кодов ответов + ExitCodeNames = new() + { + (FsExitCode.ecAllDone, Language.ExitCodeNamesAllDone), + (FsExitCode.ecInvalidParameters, Language.ExitCodeNamesInvalidParameters), + (FsExitCode.ecUserAborted, Language.ExitCodeNamesUserAborted), + (FsExitCode.ecUnknownInfoFile, Language.ExitCodeNamesUnknownInfoFile), + (FsExitCode.ecInfoVersionUnsupported, Language.ExitCodeNamesInfoVersionUnsupported), + (FsExitCode.ecSplitFileHashError, Language.ExitCodeNamesSplitFileHashError), + (FsExitCode.ecTargetFileCheckError, Language.ExitCodeNamesTargetFileCheckError) + }; + } + //Параметры приложения - public const string AppTitle = "ANB Software Делитель файлов"; - public const string AppVersion = "Версия: {0}"; - public const string AppCopyrights = "Авторские права (C) {0}, Александр Бабаев."; + public static string AppTitle => Language.AppTitle; + public static string AppVersion => Language.AppVersion; + public static string AppCopyrights => Language.AppCopyrights; //Сообщения - public const string MessageNoParametersForSplit = - "Не заданы параметры разбиения. Информацию о работе с программой смотрите в файле \"Help\\Russian\\Console.html\""; - public const string MessageSplitAsk = - "Информация о разбиваемом файле:\n***{0}\n***Размер: {1}\n***Хэш файла: {2}\n***Предполагается разбиение на {3} части(-ей)\nВы хотите начать разбиение? [Y|y - да, Любая другая буква/слово/выражение - нет]"; - public const string MessageStartSplit = "Запущено разбиение файла {0} на части размером {1} и сохранением их в директории {2}."; - public const string MessageSplitFilePart = "Идёт обработка части {0} из {1}..."; - public const string MessageSplitComplete = "Разбиение файла {0} завершено!"; - public const string MessageHashCheckStart = "Начинаю проверку хэша разбиения"; - public const string MessageHashCheckFail = "К сожалению, файл \"{0}\" не прошёл проверку хэша!"; - public const string MessageHashCheckComplete = "Проверка хэша завершена!"; - public const string MessageJoinAsk = "Вы хотите начать сборку файла {0}? [Y|y - да, любая другая буква/слово/выражение - нет]"; - public const string MessageStartJoin = "Запущено объединение файлов, заданных файлом информации {0}, в файл {1}."; - public const string MessageJoinUnsupportedFile = "К сожалению, версия файла информации {0} не поддерживается!"; - public const string MessageJoinUnknownFile = "Не могу прочитать файл информации! Возможно он зашифрован?"; - public const string MessageJoinHashError = "К сожалению, разделённые файлы не прошли проверку. Возможно они повреждены?"; - public const string MessageJoinCheckError = - "К сожалению, объединённый файл не прошли проверку корректности объединения. Возможно были какие-либо ошибки?"; - public const string MessageJoinFilePart = "Идёт обработка части {0} из {1}..."; - public const string MessageJoinComplete = "Объединение файла {0} завершено!"; + public static string MessageNoParametersForSplit => Language.MessageNoParametersForSplit; + public static string MessageSplitAsk => Language.MessageSplitAsk; + public static string MessageStartSplit => Language.MessageStartSplit; + public static string MessageSplitFilePart => Language.MessageSplitFilePart; + public static string MessageSplitComplete => Language.MessageSplitComplete; + public static string MessageHashCheckStart => Language.MessageHashCheckStart; + public static string MessageHashCheckFail => Language.MessageHashCheckFail; + public static string MessageHashCheckComplete => Language.MessageHashCheckComplete; + public static string MessageJoinAsk => Language.MessageJoinAsk; + public static string MessageStartJoin => Language.MessageStartJoin; + public static string MessageJoinUnsupportedFile => Language.MessageJoinUnsupportedFile; + public static string MessageJoinUnknownFile => Language.MessageJoinUnknownFile; + public static string MessageJoinHashError => Language.MessageJoinHashError; + public static string MessageJoinCheckError => Language.MessageJoinCheckError; + public static string MessageJoinFilePart => Language.MessageJoinFilePart; + public static string MessageJoinComplete => Language.MessageJoinComplete; + public static string MessagePleaseWaitToReady => Language.MessagePleaseWaitToReady; //Сообщения интерактивного режима - public const string InteractiveStartAsk = "Выберете одно из действий:\n* S|s - разбиение\n* J|j - объединение\n* E|e - выход\nВаш выбор:"; - public const string InteractiveWrongInput = "Выбрано неизвестное действие!"; - public const string InteractiveOperationFinish = "Операция завершена с кодом: {0}"; - public const string InteractiveSplitFileNameAsk = "Введите имя разбиваемого файла (или перетащите его сюда):"; - public const string InteractiveFileNameNotExist = "Файл не существует! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]"; - public const string InteractiveSplitFileNameResult = "Для разбиения выбран файл: {0}"; - public const string InteractiveSplitTargetDirAsk = "Выберете папку, куда следует сохранить части файла (или оставьте пустым, чтобы использовать папку разбиваемого файла):"; - public const string InteractiveSplitTargetDirResult = "Файлы разбиения будут сохранены в папке: {0}"; - public const string InteractiveSplitPartSizeAsk = "Введите размер части (в байтах):"; - public const string InteractiveSplitPartSizeAsk2 = "Вы выбрали размер части {0}. Всё правильно? [Y|y - да, продолжить, любая другая буква - нет, повторить ввод]"; - public const string InteractiveSplitPartSizeResult = "Выбран размер части: {0}"; - public const string InteractiveSplitOptionsAsk = "Введите дополнительные параметры разбиения (разделитель - пробел):"; - public const string InteractiveSplitOptionsResult = "Выбраны дополнительные параметры: [{0}]"; + public static string InteractiveStartAsk => Language.InteractiveStartAsk; + public static string InteractiveWrongInput => Language.InteractiveWrongInput; + public static string InteractiveOperationFinish => Language.InteractiveOperationFinish; + public static string InteractiveFileNameNotExist => Language.InteractiveFileNameNotExist; + public static string InteractiveFileNameExist => Language.InteractiveFileNameExist; + + public static string InteractiveSplitFileNameAsk => Language.InteractiveSplitFileNameAsk; + public static string InteractiveSplitFileNameResult => Language.InteractiveSplitFileNameResult; + public static string InteractiveSplitTargetDirAsk => Language.InteractiveSplitTargetDirAsk; + public static string InteractiveSplitTargetDirResult => Language.InteractiveSplitTargetDirResult; + public static string InteractiveSplitPartSizeAsk => Language.InteractiveSplitPartSizeAsk; + public static string InteractiveSplitPartSizeAsk2 => Language.InteractiveSplitPartSizeAsk2; + public static string InteractiveSplitPartSizeResult => Language.InteractiveSplitPartSizeResult; + public static string InteractiveSplitOptionsAsk => Language.InteractiveSplitOptionsAsk; + public static string InteractiveSplitOptionsResult => Language.InteractiveSplitOptionsResult; + + public static string InteractiveJoinFileNameAsk => Language.InteractiveJoinFileNameAsk; + public static string InteractiveJoinFileNameResult => Language.InteractiveJoinFileNameResult; + public static string InteractiveJoinTargetFileNameAsk => Language.InteractiveJoinTargetFileNameAsk; + public static string InteractiveJoinTargetFileNameResult => Language.InteractiveJoinTargetFileNameResult; + public static string InteractiveJoinOptionsAsk => Language.InteractiveJoinOptionsAsk; + public static string InteractiveJoinOptionsResult => Language.InteractiveJoinOptionsResult; + + public static string InteractiveOptionsAsk => Language.InteractiveOptionsAsk; + public static string InteractiveOptionsConfirm => Language.InteractiveOptionsConfirm; + public static string InteractiveOptionsResult => Language.InteractiveOptionsResult; //Константы размеров - public static readonly string[] FileSizeStrings = { "байт", "Кб", "Мб", "Гб", "Тб" }; + public static string[] FileSizeStrings { get; } //Переводы кодов возврата - public static readonly List<(FsExitCode, string)> ExitCodeNames = new() - { - (FsExitCode.ecAllDone, "Успешно завершено"), - (FsExitCode.ecInvalidParameters, "Неверные параметры"), - (FsExitCode.ecUserAborted, "Прервано пользователем"), - (FsExitCode.ecUnknownInfoFile, "Неизвестный файл информации о разбиении"), - (FsExitCode.ecInfoVersionUnsupported, "Версия файла информации о разбиении не поддерживается"), - (FsExitCode.ecSplitFileHashError, "Ошибка проверки хэш-суммы разделённых файлов"), - (FsExitCode.ecTargetFileCheckError, "Ошибка проверки целостности собираемого файла") - }; + public static List<(FsExitCode, string)> ExitCodeNames { get; } } \ No newline at end of file diff --git a/FileSplitterShared/FileSplitterShared.csproj b/FileSplitterShared/FileSplitterShared.csproj index c96047f..14b4f8e 100644 --- a/FileSplitterShared/FileSplitterShared.csproj +++ b/FileSplitterShared/FileSplitterShared.csproj @@ -6,6 +6,16 @@ enable FileSplitterShared FileSplitter.Shared + FileSplitted Shared Library + 2023.04.16 + Alexander Babaev + + ANB Software FileSplitter + Support library for ANB Software FileSplitter + Alexander Babaev + https://git.babaev-an.ru/babaev-an/FileSplitter + https://git.babaev-an.ru/babaev-an/FileSplitter + ru diff --git a/output/x32/FileSplitter.exe b/output/x32/FileSplitter.exe index be9bc54..4a7e7a6 100644 Binary files a/output/x32/FileSplitter.exe and b/output/x32/FileSplitter.exe differ diff --git a/output/x32/help/english.html b/output/x32/help/english.html new file mode 100644 index 0000000..ab6d57d --- /dev/null +++ b/output/x32/help/english.html @@ -0,0 +1,369 @@ + + + + + + + «ANB Software File Splitter» help + + + + +

+ ANB Software File Splitter +

+

+ Version 0.5 (2023.04.16) +
+ Copyrights © 2023 by Alewxander Babaev. +

+ +
+ + +

Content

+ +
    +
  1. + Description +
  2. +
  3. + License +
  4. +
  5. + How to use: Split file +
  6. +
  7. + How to use: Join Files +
  8. +
  9. + How to use: Application Parameters +
  10. +
  11. + How to use: Console Line Parameters +
  12. +
+ +
+ + +

Description

+

+ ANB Software File Splitter allows you to divide a file into the nth number of files of a given + volume without archiving the data, and then assemble it into a single file, if you need it. +

+ +

+ The program works in two modes: 1) using command line parameters; 2) interactive mode. +

+ +
+ +

END USER LICENSE AGREEMENT (EULA)

+ +

(Version 1.0)

+ +

DEFINITIONS

+ +

+ ANB Software File Splitter (hereinafter referred to as "product") - a program and/or a component of the program + and/or other (game, image, film, etc.), to which this agreement applies. +

+ +

+ End User (hereinafter referred to as "you" or "user") is a person and/or organization that uses the product, + provided under this license. +

+ +

+ Alexander Babaev (hereinafter referred to as "Manufacturer") - the person and/or organization that produced the + product. +

+ +

+ LIMITATIONS +

+ +

+ Some States (districts, regions, states) do not allow the limitation or exclusion of liability for unforeseen + damage. If your country (district, region, state) does not imply limitation or exclusion of liability for + unforeseen damages, then this agreement cannot apply to you. In this case, refuse to use the product. +

+ +

+ Some States (districts, regions, states) do not allow the exclusion of implied warranties. If your country + (district, region, state) does not imply the exclusion of implied warranties that this agreement may not apply + to you. In this case, refuse to use the product. +

+ +

+ SUBJECT OF THE AGREEMENT +

+ +

+ This agreement is concluded between the Manufacturer of the product and the User of the product. This agreement + defines the relationship between the Manufacturer and the User arising from the use of the product. +

+ +

+ LICENSE +

+ +

+ The product is distributed on the principle of "AS-IS" ("AS IS"). The author does not bear ANY RESPONSIBILITY in + case this program causes physical, material or any other harm to you and your computer. You install the product + at your own risk. The manufacturer and/or Distributor does not bear any responsibility for errors, malfunctions + (etc.) caused by the product to your computer. +

+ +

+ You can use this program at your discretion, as well as copy and distribute with a link to the author and the + website "https://babaev-an.ru/". You are prohibited from copying, distributing the product without a link to the + author and the previously specified site. You are prohibited from copying and using the product if the copy of + the product you are installing does not have a link to the author and the previously specified site. You are + prohibited from changing the contents of the product, disassembling, disassembling and modifying the product, + using its components in other programs without the written agreement of the Manufacturer, removing or correcting + any proprietary and/or copyright marks in the product. +

+ +

+ IF YOU DOWNLOAD, COPY THE PRODUCT OR USE IT IN ANY OTHER WAY, YOU HEREBY CONFIRM YOUR AGREEMENT TO COMPLY WITH + THE TERMS OF THIS END USER LICENSE AGREEMENT. IF YOU DO NOT AGREE, DO NOT INSTALL, COPY, OR USE THE PRODUCT. +

+ +

+ COPYRIGHT +

+ +

+ The copyright for all copies of the product belongs to the Manufacturer and is protected by the legislation of + the Russian Federation and a number of other countries. +

+ +

+ LIMITED WARRANTY AND DISCLAIMER +

+ +

+ You are not given any guarantees. All your possible demands, claims and claims (including on quality) will be + UNRECOGNIZED. +

+ +

+ LIMITATION OF LIABILITY +

+ +

+ You are not given any obligations. All your possible requirements will be UNRECOGNIZED. +

+
+ + +

How to use: Split file

+

+ The "File Splitting" operation is used to split a certain file (hereinafter, the source file) into n parts, + given size. It requires the following parameters: +

+ +
    +
  • + -fn="file name" - name of the source file. +
  • +
  • + -td="path" - the folder where the parts of the file will be saved. +
  • +
  • + -ps=«number» - the size of a part of the file in bytes. +
  • +
+ +

+ In interactive mode, the user will be interviewed for each parameter. +

+ +

+ The "File Splitting" operation may contain the following additional splitting parameters: +

+ +
    +
  • + /NoCheckHash - don't check parts for matching checksums. +
  • +
  • + /DeleteSource - after splitting, the source file is deleted. +
  • +
  • + /EncryptInfoFile - whether the information file needs to be encrypted. + ATTENTION! Enabling this parameter obliges you to specify the parameter in the additional + assembly parameters during assembly /DecryptInfoFile. Otherwise, you will get return + code 3 when trying assemble the file. +
  • +
+ +

+ Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode. +

+ +

+ For example, you need to split the C file:\MyFiles\myBigFile.mp4 to 10 MB files and save files + partitions to the C folder:\myFilesSplited\ by deleting the source code, encrypting the split + information file and not giving the user no requests. Then you should run the program in the following way: +

+

+ + FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent + +

+ +
+ + +

How to use: Join Files

+

+ The "Join files" operation connects the file that was previously split using the "Split File" operation. She + demands the following parameters: +

+ +
    +
  • + -ifn="Имя файла" - the name of the file with information about the split. +
  • +
  • + -tfn="Путь" - the file to build the split into. +
  • +
+ +

+ In interactive mode, the user will be interviewed for each parameter. +

+ +

+ The "Join Files" operation may contain the following additional assembly parameters: +

+ +
    +
  • + /NoCheckHash - don't check parts for matching checksums. +
  • +
  • + /DeleteSource - after joining, the split files are deleted. +
  • +
  • + /DecryptInfoFile - whether to decrypt the information file. ATTENTION! + Enabling this parameter obliges you to specify the parameter in the additional splitting parameters when + splitting /EncryptInfoFile. Otherwise, you will get return code 3 when trying + joining the file. +
  • +
  • + /IgnoreVersion - disable checking the version of the information file (NOT RECOMMENDED). +
  • +
  • + /SkipCheck - disable checking the collected file for compliance with the original. +
  • +
+ +

+ Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode. +

+ +

+ For example, you need to merge the file specified by the information + C:\myFilesSplitter\myBigFile.mp4.fsi, to file C:\MyFiles\myBigFile.mp4 by deleting the + split files, decrypting the split information file and disabling checking the collected file for compliance with + the original. Then you should run the program in the following way: +

+

+ + FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck + +

+ +
+ + +

How to use: Application Parameters

+

+ The operation "Application Parameters" allows you to configure application parameters and works only in + interactive mode. It requires the following parameters: +

+ + + + + + + + + + + + + + + + + + +
+ Parameter + + Possible values + + Description + + Example +
+ language + + String (language file name) + + Sets the application language + + language=russian +
+
+ + +

How to use: Console Line Parameters

+

+ To use the program in command line parameters mode, run the program by passing command line parameters in the + format: +

+

+ + FileSplitter [OPERATION] [OPERATION PARAMETERS] [ADDITIONAL PARAMETERS] [SILENT MODE] + +

+ +

+ [OPERATION] can take the following values: +

+ + + +

+ [OPERATION PARAMETERS] and [ADDITIONAL PARAMETERS] are described in the corresponding help sections. +

+ +

+ [SILENT MODE] works only in command line parameters mode and is enabled by specifying: +

+
    +
  • + --silent - the presence of this parameter indicates that no requests should be issued to the + user (the so-called "Silent mode"). +
  • +
+

+ To turn off the silent mode, simply do not specify this parameter. +

+ + + \ No newline at end of file diff --git a/output/x32/help/russian.html b/output/x32/help/russian.html new file mode 100644 index 0000000..4e31122 --- /dev/null +++ b/output/x32/help/russian.html @@ -0,0 +1,372 @@ + + + + + + + Справка по программе «ANB Software Делитель файлов» + + + + +

+ ANB Software Делитель файлов +

+

+ Версия 0.5 (2023.04.16) +
+ Авторские права © 2023, Александр Бабаев. +

+ +
+ + +

Содержание

+ +
    +
  1. + Описание +
  2. +
  3. + Лицензия +
  4. +
  5. + Как использовать: Разделение файлов +
  6. +
  7. + Как использовать: Объединение файлов +
  8. +
  9. + Как использовать: Параметры приложения +
  10. +
  11. + Как использовать: Параметры консольной строки +
  12. +
+ +
+ + +

Описание

+

+ ANB Software Делитель Файлов позволяет разделить файл на n-ое количество файлов заданного + объема без архивации данных, а также потом собрать в единый файл, если вам понадобится. +

+ +

+ Программа работает в двух режимах: 1) с помощью параметров командной строки; 2) интерактивный режим. +

+ +
+ +

ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ (EULA)

+ +

(Версия 1.0)

+ +

ОПРЕДЕЛЕНИЯ

+ +

+ ANB Software File Splitter (далее "продукт") - программа и/или компонент программы и/или другое (игра, + изображение, фильм и т.п.), на которое распространяется данное соглашение. +

+ +

+ Конечный пользователь (далее "вы" или "пользователь") - лицо и/или организация, которое(-ая) использует продукт, + предоставляемый под этой лицензией. +

+ +

+ Александр Бабаев (далее "Производитель") - лицо и/или организация, которое(-ая) произвело продукт. +

+ +

+ ОГРАНИЧЕНИЯ +

+ +

+ В некоторых государствах (районах, областях, штатах) не позволяется ограничение или исключение ответственности + за непредвиденный ущерб. Если ваша страна (район, область, штат) не подразумевает ограничение или исключение + ответственности за непредвиденный ущерб, то данное соглашение не может применяться к вам. В этом случае + откажитесь от использования продукта. +

+ +

+ В некоторых государствах (районах, областях, штатах) не позволяется исключение подразумеваемых гарантий. Если + ваша страна (район, область, штат) не подразумевает исключение подразумеваемых гарантий, то данное соглашение не + может применяться к вам. В этом случае откажитесь от использования продукта. +

+ +

+ ПРЕДМЕТ СОГЛАШЕНИЯ +

+ +

+ Данное соглашение заключается между Производителем продукта и Пользователем продукта. Данное соглашение + определяет отношения между Производителем и Пользователем, возникающие при использовании продукта. +

+ +

+ ЛИЦЕНЗИЯ +

+ +

+ Продукт распространяется по принципу "AS-IS" ("КАК ЕСТЬ"). Автор не несет НИКАКОЙ ОТВЕТСТВЕННОСТИ в случае + нанесения данной программой физического, материального или любого другого вреда вам и вашему компьютеру. Вы на + свой страх и риск устанавливаете продукт. Производитель и/или Распространитель не несет(-ут) никакой + ответственности за ошибки, неисправности (и т.п.), нанесенные продуктом вашему компьютеру. +

+ +

+ Вы можете использовать данную программу на свое усмотрение, а также копировать и распространять со ссылкой на + автора и сайт "https://babaev-an.ru/". Вам запрещается копировать, распространять продукт без ссылки на автора и + указанный ранее сайт. Вам запрещается копирование и использование продукта, если устанавливаемая вами копия + продукта не имеет ссылки на автора и указанный ранее сайт. Вам запрещается изменять содержимое продукта, + разбирать, дизассемблировать и изменять продукт, использовать её компоненты в других программах без письменного + соглашения Производителя, удалять или исправлять в продукте любые знаки о праве собственности и/или авторском + праве на продукт. +

+ +

+ ЕСЛИ ВЫ ЗАГРУЖАЕТЕ, КОПИРУЕТЕ ПРОДУКТ ИЛИ ИСПОЛЬЗУЕТЕ ЕГО КАКИМ-ЛИБО ДРУГИМ СПОСОБОМ, ЭТИМ ВЫ ПОДТВЕРЖДАЕТЕ СВОЕ + СОГЛАСИЕ СОБЛЮДАТЬ УСЛОВИЯ ДАННОГО ЛИЦЕНЗИОННОГО СОГЛАШЕНИЯ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ. ЕСЛИ ВЫ НЕ СОГЛАСНЫ, НЕ + УСТАНАВЛИВАЙТЕ, НЕ КОПИРУЙТЕ И НЕ ИСПОЛЬЗУЙТЕ ПРОДУКТ. +

+ +

+ АВТОРСКОЕ ПРАВО +

+ +

+ Авторское право на все копии продукта принадлежат Производителю и защищено законодательством РФ и ряда других + стран. +

+ +

+ ОГРАНИЧЕННАЯ ГАРАНТИЯ И ПРАВОВАЯ ОГОВОРКА +

+ +

+ Вам не дается никаких гарантий. Все ваши возможные требования, притязания и претензии (в том числе и по + качеству) будут НЕПРИЗНАННЫ. +

+ +

+ ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ +

+ +

+ Вам не дается никаких обязательств. Все ваши возможные требования будут НЕПРИЗНАННЫ. +

+
+ + +

Как использовать: Разделение файлов

+

+ Операция «Разделение файлов» служит для разбиения некоторого файла (далее, исходный файл) на n частей, заданного + размера. Она требует следующих параметров: +

+ +
    +
  • + -fn="Имя файла" - имя исходного файла. +
  • +
  • + -td="Путь" - папка, в которую будут сохранены части файла. +
  • +
  • + -ps=«ЧИСЛО»> - размер части файла в байтах. +
  • +
+ +

+ В интерактивном режиме пользователь будет опрошен по каждому параметру. +

+ +

+ Операция «Разделение файлов» может содержать следующие дополнительные параметры разбиения: +

+ +
    +
  • + /NoCheckHash - не проверять части на совпадение с контрольными суммами. +
  • +
  • + /DeleteSource - после разбиения удаляется исходный файл. +
  • +
  • + /EncryptInfoFile - нужно ли шифровать файл информации. ВНИМАНИЕ! Включение + этого параметра обязывает Вас при сборке указывать в дополнительных параметрах сборки параметр + /DecryptInfoFile. В противном случае, вы словите код возврата 3 при попытке + собрать файл. +
  • +
+ +

+ Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме. +

+ +

+ Например, нужно разбить файл C:\myFiles\myBigFile.mp4 на файлы размером 10 МБайт и сохранить файлы + разбиения в папку C:\myFilesSplited\, удалив исходник, зашифровав файл информации о разбиении и не + выдавая пользователю никаких запросов. Тогда вы должны запустить программу следующим способом: +

+

+ + FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent + +

+ +
+ + +

Как использовать: Объединение файлов

+

+ Операция «Объединение файлов» соединяет разбитый ранее с помощью операции «Разделения файла» файл. Она требует + следующих параметров: +

+ +
    +
  • + -ifn="Имя файла" - имя файла с информацией о разбиении. +
  • +
  • + -tfn="Путь" - файл, в который нужно собрать разбиение. +
  • +
+ +

+ В интерактивном режиме пользователь будет опрошен по каждому параметру. +

+ +

+ Операция «Объединение файлов» может содержать следующие дополнительные параметры сборки: +

+ +
    +
  • + /NoCheckHash - не проверять части на совпадение с контрольными суммами. +
  • +
  • + /DeleteSource - после объединения удаляются файлы разбиения. +
  • +
  • + /DecryptInfoFile - нужно ли дешифровать файл информации. ВНИМАНИЕ! Включение + этого параметра обязывает Вас при разбивке указывать в дополнительных параметрах разбиения параметр + /EncryptInfoFile. В противном случае, вы словите код возврата 3 при попытке + собрать файл. +
  • +
  • + /IgnoreVersion - отключить проверку версии файла информации (НЕ РЕКОМЕНДУЕТСЯ). +
  • +
  • + /SkipCheck - отключить проверку собранного файла на соответствие оригиналу. +
  • +
+ +

+ Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме. +

+ +

+ Например, нужно объединить файл, заданный информацией C:\myFilesSplited\myBigFile.mp4.fsi, в файл + C:\myFiles\myBigFile.mp4, удалив файлы разбиения, дешифровав файл информации о разбиении и отключив + проверку собранного файла на соответствие оригиналу. Тогда вы должны + запустить программу следующим способом: +

+

+ + FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck + +

+ +
+ + +

Как использовать: Параметры приложения

+

+ Операция «Параметры приложения» позволяет настроить параметры приложения и работает только в + интерактивном режиме. Она требует + следующих параметров: +

+ + + + + + + + + + + + + + + + + + +
+ Параметр + + Возможные значение + + Описание + + Пример +
+ language + + Строка (имя файла языка) + + Задаёт язык приложения + + language=russian +
+
+ + +

Как использовать: Параметры консольной строки

+

+ Для использования программы в режиме параметров командной строки запустите программу, передав параметры + командной строки в формате: +

+

+ + FileSplitter [ОПЕРАЦИЯ] [ПАРАМЕТРЫ ОПЕРАЦИИ] [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] [ТИХИЙ РЕЖИМ] + +

+ +

+ [ОПЕРАЦИЯ] может принимать следующие значения: +

+ + + +

+ [ПАРАМЕТРЫ ОПЕРАЦИИ] и [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] описаны в соответствующих разделах справки. +

+ +

+ [ТИХИЙ РЕЖИМ] работает только в режиме параметров командной строки и включается указанием: +

+
    +
  • + --silent - наличие этого параметра указывает, что не должны выдаваться никакие запросы + пользователю (так называемый «Тихий режим»). +
  • +
+

+ Для выключения тихого режима просто не указывайте этот параметр. +

+ + + + \ No newline at end of file diff --git a/output/x32/languages/english.json b/output/x32/languages/english.json new file mode 100644 index 0000000..e184875 --- /dev/null +++ b/output/x32/languages/english.json @@ -0,0 +1,70 @@ +{ + //This file was translated with Yandex Translator (https://translate.yandex.ru/) + //Application Parameters + "AppTitle": "ANB Software File Splitter", + "AppVersion": "Version: {0}", + "AppCopyrights": "Copyrights (C) {0} by Alexander Babaev.", + + //Messages + "MessageNoParametersForSplit": "Split parameters are not set. For information about working with the program, see the file «\\Help\\English.html#ConsoleParams»", + "MessageSplitAsk": "Information about splitting file:\n***{0}\n***Size: {1}\n***File hash: {2}\n***It is assumed to split into {3} parts(s)\nDo you want to start split? [Y|y - yes, any other letter - no]", + "MessageStartSplit": "The splitting of the file {0} into parts of the size {1} and saving them in the directory {2} is started.", + "MessageSplitFilePart": "Processing part {0} of {1}...", + "MessageSplitComplete": "File splitting {0} is complete!", + "MessageHashCheckStart": "Starting check the hash of the splitting", + "MessageHashCheckFail": "Unfortunately, the file \"{0}\" did not pass the hash check!", + "MessageHashCheckComplete": "Hash verification is complete!", + "MessageJoinAsk": "Do you want to start joining file {0}? [Y|y - yes, any other letter - no]", + "MessageStartJoin": "Joining of files specified by the information file {0} into the file {1} has started.", + "MessageJoinUnsupportedFile": "Unfortunately, the version of the information file {0} is not supported!", + "MessageJoinUnknownFile": "Can't read the information file! Maybe it's encrypted?", + "MessageJoinHashError": "Unfortunately, the split files did not pass verification. Perhaps they are damaged?", + "MessageJoinCheckError": "Unfortunately, the joined file did not pass the validation of join. Perhaps there were any mistakes?", + "MessageJoinFilePart": "Processing part {0} of {1}...", + "MessageJoinComplete": "File joining {0} is complete!", + "MessagePleaseWaitToReady": "Please wait. Preparations for the operation are underway. This may take a long time, during which the program may seem to hang.", + + //Interactive mode messages + "InteractiveStartAsk": "Choose one of the actions:\n* S|s - splitting\n* J|j - joining\n* O|o - program's options\n* E|e - exit\nYour choice:", + "InteractiveWrongInput": "Unknown action selected!", + "InteractiveOperationFinish": "The operation is completed! Exit code is: {0}", + "InteractiveFileNameNotExist": "The file does not exist! Repeat file entry? [Y|y - to repeat, any other letter - to abort operation]", + "InteractiveFileNameExist": "The file exists! You need to select a non-existent file! Repeat file entry? [Y|y - to repeat, any other letter - to abort operation]", + + "InteractiveSplitFileNameAsk": "Enter the name of the file to split (or drag it here):", + "InteractiveSplitFileNameResult": "File selected for splitting: {0}", + "InteractiveSplitTargetDirAsk": "Select the folder where you want to save the parts of the file (or leave it empty to use the folder of the split file):", + "InteractiveSplitTargetDirResult": "The split files will be saved in the folder: {0}", + "InteractiveSplitPartSizeAsk": "Enter the size of the part (in bytes):", + "InteractiveSplitPartSizeAsk2": "You have selected the part size {0}. Is everything right? [Y|y - yes, continue; any other letter - no, repeat input]", + "InteractiveSplitPartSizeResult": "Selected part size: {0}", + "InteractiveSplitOptionsAsk": "Enter additional splitting parameters (space separator):", + "InteractiveSplitOptionsResult": "Additional splitting parameters are selected: [{0}]", + + "InteractiveJoinFileNameAsk": "Enter the name of the split information file (or drag it here):", + "InteractiveJoinFileNameResult": "The file selected for the join is: {0}", + "InteractiveJoinTargetFileNameAsk": "Select the name and path to the file to be joined (for example, c:\\myFiles\\myFile.txt ):", + "InteractiveJoinTargetFileNameResult": "The file will be joined: {0}", + "InteractiveJoinOptionsAsk": "Enter additional join parameters (space delimiter):", + "InteractiveJoinOptionsResult": "Additional join parameters selected: [{0}]", + + "InteractiveOptionsAsk": "Enter the program parameters (space delimiter):", + "InteractiveOptionsConfirm": "Program parameters selected:\n{0}\nDo you confirm them? [Y|y - yes, any other letter - to abort]", + "InteractiveOptionsResult": "The parameters are saved! To apply them, you need to restart the program...", + + //Константы размеров + "FileSizeStringsByte": "byte", + "FileSizeStringsKByte": "KByte", + "FileSizeStringsMByte": "MByte", + "FileSizeStringsGByte": "GByte", + "FileSizeStringsTByte": "TByte", + + //Переводы кодов возврата + "ExitCodeNamesAllDone": "Completed successfully", + "ExitCodeNamesInfoVersionUnsupported": "The version of the split information file is not supported", + "ExitCodeNamesInvalidParameters": "Invalid parameters", + "ExitCodeNamesSplitFileHashError": "Error checking the hash sum of split files", + "ExitCodeNamesTargetFileCheckError": "Error checking the integrity of joined file", + "ExitCodeNamesUnknownInfoFile": "Unknown partitioning information file", + "ExitCodeNamesUserAborted": "Aborted by the user" +} \ No newline at end of file diff --git a/output/x32/languages/russian.json b/output/x32/languages/russian.json new file mode 100644 index 0000000..73e90fd --- /dev/null +++ b/output/x32/languages/russian.json @@ -0,0 +1,69 @@ +{ + //Параметры приложения + "AppTitle": "ANB Software Делитель файлов", + "AppVersion": "Версия: {0}", + "AppCopyrights": "Авторские права (C) {0}, Александр Бабаев.", + + //Сообщения + "MessageNoParametersForSplit": "Не заданы параметры разбиения. Информацию о работе с программой смотрите в файле «<папка с программой>\\Help\\Russian.html#ConsoleParams»\"", + "MessageSplitAsk": "Информация о разбиваемом файле:\n***{0}\n***Размер: {1}\n***Хэш файла: {2}\n***Предполагается разбиение на {3} части(-ей)\nВы хотите начать разбиение? [Y|y - да, Любая другая буква/слово/выражение - нет]", + "MessageStartSplit": "Запущено разбиение файла {0} на части размером {1} и сохранением их в директории {2}.", + "MessageSplitFilePart": "Идёт обработка части {0} из {1}...", + "MessageSplitComplete": "Разбиение файла {0} завершено!", + "MessageHashCheckStart": "Начинаю проверку хэша разбиения", + "MessageHashCheckFail": "К сожалению, файл \"{0}\" не прошёл проверку хэша!", + "MessageHashCheckComplete": "Проверка хэша завершена!", + "MessageJoinAsk": "Вы хотите начать сборку файла {0}? [Y|y - да, любая другая буква/слово/выражение - нет]", + "MessageStartJoin": "Запущено объединение файлов, заданных файлом информации {0}, в файл {1}.", + "MessageJoinUnsupportedFile": "К сожалению, версия файла информации {0} не поддерживается!", + "MessageJoinUnknownFile": "Не могу прочитать файл информации! Возможно он зашифрован?", + "MessageJoinHashError": "К сожалению, разделённые файлы не прошли проверку. Возможно они повреждены?", + "MessageJoinCheckError": "К сожалению, объединённый файл не прошли проверку корректности объединения. Возможно были какие-либо ошибки?", + "MessageJoinFilePart": "Идёт обработка части {0} из {1}...", + "MessageJoinComplete": "Объединение файла {0} завершено!", + "MessagePleaseWaitToReady": "Пожалуйста, подождите. Идёт подготовка к операции. Это может занять длительное время, в течении которого программа может казаться зависшей.", + + //Сообщения интерактивного режима + "InteractiveStartAsk": "Выберете одно из действий:\n* S|s - разбиение\n* J|j - объединение\n* O|o - параметры программы\n* E|e - выход\nВаш выбор:", + "InteractiveWrongInput": "Выбрано неизвестное действие!", + "InteractiveOperationFinish": "Операция завершена с кодом: {0}", + "InteractiveFileNameNotExist": "Файл не существует! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]", + "InteractiveFileNameExist": "Файл существует! Нужно выбрать несуществующий файл! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]", + + "InteractiveSplitFileNameAsk": "Введите имя разбиваемого файла (или перетащите его сюда):", + "InteractiveSplitFileNameResult": "Для разбиения выбран файл: {0}", + "InteractiveSplitTargetDirAsk": "Выберете папку, куда следует сохранить части файла (или оставьте пустым, чтобы использовать папку разбиваемого файла):", + "InteractiveSplitTargetDirResult": "Файлы разбиения будут сохранены в папке: {0}", + "InteractiveSplitPartSizeAsk": "Введите размер части (в байтах):", + "InteractiveSplitPartSizeAsk2": "Вы выбрали размер части {0}. Всё правильно? [Y|y - да, продолжить, любая другая буква - нет, повторить ввод]", + "InteractiveSplitPartSizeResult": "Выбран размер части: {0}", + "InteractiveSplitOptionsAsk": "Введите дополнительные параметры разбиения (разделитель - пробел):", + "InteractiveSplitOptionsResult": "Выбраны дополнительные параметры разбиения: [{0}]", + + "InteractiveJoinFileNameAsk": "Введите имя файла информации о разбиении (или перетащите его сюда):", + "InteractiveJoinFileNameResult": "Для сборки выбран файл: {0}", + "InteractiveJoinTargetFileNameAsk": "Выберите имя и путь к собираемому файлу (например, c:\\myFiles\\myFile.txt):", + "InteractiveJoinTargetFileNameResult": "Будет собран файл: {0}", + "InteractiveJoinOptionsAsk": "Введите дополнительные параметры соединения (разделитель - пробел):", + "InteractiveJoinOptionsResult": "Выбраны дополнительные параметры соединения: [{0}]", + + "InteractiveOptionsAsk": "Введите параметры программы (разделитель - пробел):", + "InteractiveOptionsConfirm": "Выбраны параметры программы:\n{0}\nВы их подтверждаете? [Y|y - да, любая другая буква - выход]", + "InteractiveOptionsResult": "Параметры сохранены! Для их применения требуется перезапуск программы...", + + //Константы размеров + "FileSizeStringsByte": "байт", + "FileSizeStringsKByte": "Кб", + "FileSizeStringsMByte": "Мб", + "FileSizeStringsGByte": "Гб", + "FileSizeStringsTByte": "Тб", + + //Переводы кодов возврата + "ExitCodeNamesAllDone": "Успешно завершено", + "ExitCodeNamesInfoVersionUnsupported": "Версия файла информации о разбиении не поддерживается", + "ExitCodeNamesInvalidParameters": "Неверные параметры", + "ExitCodeNamesSplitFileHashError": "Ошибка проверки хэш-суммы разделённых файлов", + "ExitCodeNamesTargetFileCheckError": "Ошибка проверки целостности собираемого файла", + "ExitCodeNamesUnknownInfoFile": "Неизвестный файл информации о разбиении", + "ExitCodeNamesUserAborted": "Прервано пользователем" +} \ No newline at end of file diff --git a/output/x32/settings.json b/output/x32/settings.json new file mode 100644 index 0000000..036365a --- /dev/null +++ b/output/x32/settings.json @@ -0,0 +1 @@ +{"Language":"russian"} diff --git a/output/x32/sni.dll b/output/x32/sni.dll deleted file mode 100644 index 5fc21ac..0000000 Binary files a/output/x32/sni.dll and /dev/null differ