This commit is contained in:
Александр Бабаев 2023-04-16 15:43:17 +03:00
parent 3f774d751f
commit 79b0df8609
19 changed files with 2394 additions and 110 deletions

View File

@ -23,6 +23,84 @@ internal static class Executor
WriteLine(args.Message); WriteLine(args.Message);
} }
/// <summary>
/// Получение параметров разбиения
/// </summary>
/// <param name="params">Парсер параметров</param>
/// <returns>Список параметров <see cref="FileSplitOptions"/></returns>
public static List<FileSplitOptions> GetSplitOptions (ConsoleParamsParser @params)
{
//Создаю результат
List<FileSplitOptions> 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;
}
/// <summary>
/// Получение параметров разбиения
/// </summary>
/// <param name="params">Массив параметров</param>
/// <returns>Список параметров <see cref="FileSplitOptions"/></returns>
public static List<FileSplitOptions> GetSplitOptions (string[] @params)
{
ConsoleParamsParser parser = new(@params);
return GetSplitOptions(parser);
}
/// <summary>
/// Получение параметров соединения
/// </summary>
/// <param name="params">Парсер параметров</param>
/// <returns>Список параметров <see cref="FileJoinOptions"/></returns>
public static List<FileJoinOptions> GetJoinOptions (ConsoleParamsParser @params)
{
//Создаю результат
List<FileJoinOptions> 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;
}
/// <summary>
/// Получение параметров соединения
/// </summary>
/// <param name="params">Массив параметров</param>
/// <returns>Список параметров <see cref="FileJoinOptions"/></returns>
public static List<FileJoinOptions> GetJoinOptions (string[] @params)
{
ConsoleParamsParser parser = new(@params);
return GetJoinOptions(parser);
}
/// <summary> /// <summary>
/// Выполняю разбиение /// Выполняю разбиение
/// </summary> /// </summary>
@ -52,10 +130,10 @@ internal static class Executor
fileInfo.SplitCount); fileInfo.SplitCount);
//- получаю ответ //- получаю ответ
string? userInput = ReadLine(); string userInput = ReadInput("");
//- проверяю согласие //- проверяю согласие
if (userInput == null || userInput.ToLower() != "y") if (userInput != "y")
//-- и прерываю, если не получил //-- и прерываю, если не получил
return FsExitCode.ecUserAborted; return FsExitCode.ecUserAborted;
} }
@ -86,10 +164,10 @@ internal static class Executor
WriteLine(Localization.MessageJoinAsk, targetFileName); WriteLine(Localization.MessageJoinAsk, targetFileName);
//- получаю ответ //- получаю ответ
string? userInput = ReadLine(); string userInput = ReadInput("");
//- проверяю согласие //- проверяю согласие
if (userInput == null || userInput.ToLower() != "y") if (userInput != "y")
//-- и прерываю, если не получил //-- и прерываю, если не получил
return FsExitCode.ecUserAborted; return FsExitCode.ecUserAborted;
} }
@ -110,13 +188,13 @@ internal static class Executor
WriteLine(Localization.InteractiveStartAsk); WriteLine(Localization.InteractiveStartAsk);
//Получаю ответ //Получаю ответ
userInput = ReadLine() ?? string.Empty; userInput = ReadInput(string.Empty);
//Обработано ли решение //Обработано ли решение
bool handled = false; bool handled = false;
//Обрабатываем выбор пользователя //Обрабатываем выбор пользователя
switch (userInput.ToLower()) switch (userInput)
{ {
//Если пользователь выбрал разбиение //Если пользователь выбрал разбиение
case "s": case "s":
@ -131,6 +209,35 @@ internal static class Executor
handled = true; handled = true;
break; 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": case "e":
//- то указываем на перехват //- то указываем на перехват
@ -154,7 +261,7 @@ internal static class Executor
/// <returns><see cref="FsExitCode"/></returns> /// <returns><see cref="FsExitCode"/></returns>
public static FsExitCode DoSplitInteractive () public static FsExitCode DoSplitInteractive ()
{ {
//Пользовательский ввод //Класс локализации
string userInput; string userInput;
//Обработан ли ввод //Обработан ли ввод
@ -168,7 +275,7 @@ internal static class Executor
WriteLine(Localization.InteractiveSplitFileNameAsk); WriteLine(Localization.InteractiveSplitFileNameAsk);
//Считываю имя файла //Считываю имя файла
userInput = ReadLine() ?? string.Empty; userInput = ReadInput(string.Empty);
//Если файл не существует //Если файл не существует
if (!File.Exists(userInput)) if (!File.Exists(userInput))
@ -177,7 +284,7 @@ internal static class Executor
WriteLine(Localization.InteractiveFileNameNotExist); WriteLine(Localization.InteractiveFileNameNotExist);
//- считываю ответ //- считываю ответ
userInput = ReadLine() ?? string.Empty; userInput = ReadInput(string.Empty);
//- если выбрано не повторять //- если выбрано не повторять
if (userInput.ToLower() != "y") if (userInput.ToLower() != "y")
@ -203,7 +310,7 @@ internal static class Executor
WriteLine(Localization.InteractiveSplitTargetDirAsk); WriteLine(Localization.InteractiveSplitTargetDirAsk);
//Считываю данные //Считываю данные
userInput = ReadLine() ?? string.Empty; userInput = ReadInput(string.Empty);
//Если вместо папки пустое место //Если вместо папки пустое место
if (string.IsNullOrWhiteSpace(userInput)) if (string.IsNullOrWhiteSpace(userInput))
@ -236,16 +343,13 @@ internal static class Executor
WriteLine(Localization.InteractiveSplitPartSizeAsk); WriteLine(Localization.InteractiveSplitPartSizeAsk);
//Считываю размер части //Считываю размер части
userInput = ReadLine() ?? fileSize.ToString(); partSize = ReadInput(fileSize);
//Задаю размер части
partSize = TypeConverter.StrToInt64(userInput, fileSize);
//Запрашиваю согласие на размер части //Запрашиваю согласие на размер части
WriteLine(Localization.InteractiveSplitPartSizeAsk2, converter.Convert(partSize)); WriteLine(Localization.InteractiveSplitPartSizeAsk2, converter.Convert(partSize));
//Считываю ответ //Считываю ответ
userInput = ReadLine() ?? string.Empty; userInput = ReadInput(string.Empty);
//Если согласен, то выхожу из цикла //Если согласен, то выхожу из цикла
if (userInput.ToLower() == "y") if (userInput.ToLower() == "y")
@ -256,33 +360,200 @@ internal static class Executor
WriteLine(Localization.InteractiveSplitPartSizeResult, converter.Convert(partSize)); WriteLine(Localization.InteractiveSplitPartSizeResult, converter.Convert(partSize));
/* Опции разбиения */ /* Опции разбиения */
//Ввожу переменную опций разбиения
List<FileSplitOptions> options = new();
//Запрос опций разбиения //Запрос опций разбиения
WriteLine(Localization.InteractiveSplitOptionsAsk); WriteLine(Localization.InteractiveSplitOptionsAsk);
//Считываю опции разбиения //Считываю опции разбиения
userInput = (ReadLine() ?? string.Empty).ToLower().Trim(); userInput = ReadInput(string.Empty);
//Инициализирую список параметров //Ввожу переменную опций разбиения
ConsoleParamsParser @params = new(userInput.Split(' ')); List<FileSplitOptions> options = GetSplitOptions(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);
//Вывожу информацию о выборе параметров //Вывожу информацию о выборе параметров
WriteLine(Localization.InteractiveSplitOptionsResult, userInput); WriteLine(Localization.InteractiveSplitOptionsResult, userInput);
/* Выполнение разбиения */ /* Выполнение разбиения */
//Вывожу информацию о начале работы
WriteLine(Localization.MessagePleaseWaitToReady);
//Выполняю операцию
return DoSplit(fileName, targetDir, partSize, false, options); return DoSplit(fileName, targetDir, partSize, false, options);
} }
/// <summary>
/// Интерактивное соединение файла
/// </summary>
/// <returns><see cref="FsExitCode"/></returns>
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<FileJoinOptions> options = GetJoinOptions(userInput.Split(' '));
//Вывожу информацию о выборе параметров
WriteLine(Localization.InteractiveJoinOptionsResult, userInput);
/* Выполнение соединения */
//Вывожу информацию о начале работы
WriteLine(Localization.MessagePleaseWaitToReady);
//Выполняю операцию
return DoJoin(fileName, targetFileName, false, options);
}
/// <summary>
/// Интерактивные опции
/// </summary>
/// <returns><see cref="FsExitCode"/></returns>
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;
}
/// <summary>
/// Чтение строкового значения
/// </summary>
/// <param name="defaultValue">Значение по умолчанию</param>
/// <returns>Ввод пользователя в формате <see cref="string"/></returns>
private static string ReadInput (string defaultValue = "") => (ReadLine() ?? defaultValue).Trim(new[] { '"' }).ToLower();
/// <summary>
/// Чтение численного значения
/// </summary>
/// <param name="defaultValue">Значение по умолчанию</param>
/// <returns>Ввод пользователя в формате <see cref="long"/></returns>
private static long ReadInput (long defaultValue = 0) => TypeConverter.StrToInt64(ReadLine() ?? defaultValue.ToString(), defaultValue);
} }

View File

@ -9,7 +9,7 @@
<AssemblyName>FileSplitter</AssemblyName> <AssemblyName>FileSplitter</AssemblyName>
<PackageId>FileSplitter</PackageId> <PackageId>FileSplitter</PackageId>
<Title>ANB Software File Splitter Console</Title> <Title>ANB Software File Splitter Console</Title>
<Version>2023.04.09</Version> <Version>2023.04.16</Version>
<Authors>Alexander Babaev</Authors> <Authors>Alexander Babaev</Authors>
<Product>ANB Software File Splitter</Product> <Product>ANB Software File Splitter</Product>
<Description>Console App for ANB Software File Splitter. Split and join any file.</Description> <Description>Console App for ANB Software File Splitter. Split and join any file.</Description>
@ -28,7 +28,18 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Classes\" /> <None Update="help\english.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="help\russian.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="languages\english.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="languages\russian.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -56,18 +56,7 @@ static int FileSplit4Params (ConsoleParamsParser @params)
//- размер части //- размер части
long partSize = TypeConverter.StrToInt64(@params.GetValue("-ps") ?? string.Empty); long partSize = TypeConverter.StrToInt64(@params.GetValue("-ps") ?? string.Empty);
//- параметры //- параметры
List<FileSplitOptions> options = new(); List<FileSplitOptions> options = Executor.GetSplitOptions(@params);
//Проверяю параметры разбиения
//- отключена ли проверка хэша
if (@params.HasParam("/NoCheckHash"))
options.Add(FileSplitOptions.fsoNoCheckHash);
//- нужно ли удалять исходный файл
if (@params.HasParam("/DeleteSource"))
options.Add(FileSplitOptions.fsoDeleteSourceFileAfterSplit);
//- нужно ли шифровать файл информации
if (@params.HasParam("/EncryptInfoFile"))
options.Add(FileSplitOptions.fsoEncryptInfoFile);
//Получаю параметры консоли //Получаю параметры консоли
bool silent = @params.HasParam("--silent"); bool silent = @params.HasParam("--silent");
@ -95,24 +84,7 @@ static int FileJoin4Params (ConsoleParamsParser @params)
//- имя целевого файла //- имя целевого файла
string targetFileName = @params.GetValue("-tfn") ?? string.Empty; string targetFileName = @params.GetValue("-tfn") ?? string.Empty;
//- параметры //- параметры
List<FileJoinOptions> options = new(); List<FileJoinOptions> options = Executor.GetJoinOptions(@params);
//Проверяю параметры разбиения
//- отключена ли проверка хэша
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);
//Получаю параметры консоли //Получаю параметры консоли
bool silent = @params.HasParam("--silent"); bool silent = @params.HasParam("--silent");

View File

@ -0,0 +1,369 @@
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>«ANB Software File Splitter» help</title>
</head>
<body>
<h1>
ANB Software File Splitter
</h1>
<h2>
Version 0.5 (2023.04.16)
<br />
Copyrights &copy; 2023 by Alewxander Babaev.
</h2>
<hr />
<a name="toc"></a>
<h3>Content</h3>
<ol>
<li>
<a href="#description">Description</a>
</li>
<li>
<a href="#license">License</a>
</li>
<li>
<a href="#split">How to use: Split file</a>
</li>
<li>
<a href="#join">How to use: Join Files</a>
</li>
<li>
<a href="#options">How to use: Application Parameters</a>
</li>
<li>
<a href="#ConsoleParams">How to use: Console Line Parameters</a>
</li>
</ol>
<hr />
<a name="description"></a>
<h3>Description</h3>
<p>
<strong>ANB Software File Splitter</strong> 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.
</p>
<p>
The program works in two modes: 1) using command line parameters; 2) interactive mode.
</p>
<hr />
<a name="license"></a>
<h3>END USER LICENSE AGREEMENT (EULA)</h3>
<p>(Version 1.0)</p>
<h4>DEFINITIONS</h4>
<p>
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.
</p>
<p>
End User (hereinafter referred to as "you" or "user") is a person and/or organization that uses the product,
provided under this license.
</p>
<p>
Alexander Babaev (hereinafter referred to as "Manufacturer") - the person and/or organization that produced the
product.
</p>
<h4>
LIMITATIONS
</h4>
<p>
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.
</p>
<p>
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.
</p>
<h4>
SUBJECT OF THE AGREEMENT
</h4>
<p>
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.
</p>
<h4>
LICENSE
</h4>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h4>
COPYRIGHT
</h4>
<p>
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.
</p>
<h4>
LIMITED WARRANTY AND DISCLAIMER
</h4>
<p>
You are not given any guarantees. All your possible demands, claims and claims (including on quality) will be
UNRECOGNIZED.
</p>
<h4>
LIMITATION OF LIABILITY
</h4>
<p>
You are not given any obligations. All your possible requirements will be UNRECOGNIZED.
</p>
<hr />
<a name="split"></a>
<h3>How to use: Split file</h3>
<p>
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:
</p>
<ul>
<li>
<code>-fn="file name"</code> - name of the source file.
</li>
<li>
<code>-td="path"</code> - the folder where the parts of the file will be saved.
</li>
<li>
<code>-ps=«number»</code> - the size of a part of the file in bytes.
</li>
</ul>
<p>
In interactive mode, the user will be interviewed for each parameter.
</p>
<p>
The "File Splitting" operation may contain the following additional splitting parameters:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - don't check parts for matching checksums.
</li>
<li>
<code>/DeleteSource</code> - after splitting, the source file is deleted.
</li>
<li>
<code>/EncryptInfoFile</code> - whether the information file needs to be encrypted.
<strong>ATTENTION!</strong> Enabling this parameter obliges you to specify the parameter in the additional
assembly parameters during assembly <code>/DecryptInfoFile</code>. Otherwise, you will get <strong> return
code 3</strong> when trying assemble the file.
</li>
</ul>
<p>
Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode.
</p>
<p>
For example, you need to split the <code>C file:\MyFiles\myBigFile.mp4</code> to 10 MB files and save files
partitions to the <code>C folder:\myFilesSplited\</code> 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:
</p>
<p>
<code>
FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent
</code>
</p>
<hr />
<a name="join"></a>
<h3>How to use: Join Files</h3>
<p>
The "Join files" operation connects the file that was previously split using the "Split File" operation. She
demands the following parameters:
</p>
<ul>
<li>
<code>-ifn="Имя файла"</code> - the name of the file with information about the split.
</li>
<li>
<code>-tfn="Путь"</code> - the file to build the split into.
</li>
</ul>
<p>
In interactive mode, the user will be interviewed for each parameter.
</p>
<p>
The "Join Files" operation may contain the following additional assembly parameters:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - don't check parts for matching checksums.
</li>
<li>
<code>/DeleteSource</code> - after joining, the split files are deleted.
</li>
<li>
<code>/DecryptInfoFile</code> - whether to decrypt the information file. <strong>ATTENTION!</strong>
Enabling this parameter obliges you to specify the parameter in the additional splitting parameters when
splitting <code>/EncryptInfoFile</code>. Otherwise, you will get <strong> return code 3</strong> when trying
joining the file.
</li>
<li>
<code>/IgnoreVersion</code> - disable checking the version of the information file (NOT RECOMMENDED).
</li>
<li>
<code>/SkipCheck</code> - disable checking the collected file for compliance with the original.
</li>
</ul>
<p>
Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode.
</p>
<p>
For example, you need to merge the file specified by the information
<code>C:\myFilesSplitter\myBigFile.mp4.fsi</code>, to file <code>C:\MyFiles\myBigFile.mp4</code> 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:
</p>
<p>
<code>
FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck
</code>
</p>
<hr />
<a name="options"></a>
<h3>How to use: Application Parameters</h3>
<p>
The operation "Application Parameters" allows you to configure application parameters and works <strong> only in
interactive mode</strong>. It requires the following parameters:
</p>
<table style="text-align: center; border: 2px solid black;">
<thead>
<tr>
<th>
Parameter
</th>
<th>
Possible values
</th>
<th>
Description
</th>
<th>
Example
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
language
</td>
<td>
String (language file name)
</td>
<td>
Sets the application language
</td>
<td>
language=russian
</td>
</tr>
</tbody>
</table>
<hr />
<a name="ConsoleParams"></a>
<h3>How to use: Console Line Parameters</h3>
<p>
To use the program in command line parameters mode, run the program by passing command line parameters in the
format:
</p>
<p>
<code>
FileSplitter [OPERATION] [OPERATION PARAMETERS] [ADDITIONAL PARAMETERS] [SILENT MODE]
</code>
</p>
<p>
[OPERATION] can take the following values:
</p>
<ul>
<li>
<code>split</code> - perform <a href="#split">split operation</a>.
</li>
<li>
<code>join</code> - perform <a href="#join">join operation</a>.
</li>
</ul>
<p>
[OPERATION PARAMETERS] and [ADDITIONAL PARAMETERS] are described in the corresponding help sections.
</p>
<p>
[SILENT MODE] works only in command line parameters mode and is enabled by specifying:
</p>
<ul>
<li>
<code>--silent</code> - the presence of this parameter indicates that no requests should be issued to the
user (the so-called "Silent mode").
</li>
</ul>
<p>
To turn off the silent mode, simply do not specify this parameter.
</p>
</body>
</html>

View File

@ -0,0 +1,372 @@
<!DOCTYPE html>
<html lang="ru" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Справка по программе «ANB Software Делитель файлов»</title>
</head>
<body>
<h1>
ANB Software Делитель файлов
</h1>
<h2>
Версия 0.5 (2023.04.16)
<br />
Авторские права &copy; 2023, Александр Бабаев.
</h2>
<hr />
<a name="toc"></a>
<h3>Содержание</h3>
<ol>
<li>
<a href="#description">Описание</a>
</li>
<li>
<a href="#license">Лицензия</a>
</li>
<li>
<a href="#split">Как использовать: Разделение файлов</a>
</li>
<li>
<a href="#join">Как использовать: Объединение файлов</a>
</li>
<li>
<a href="#options">Как использовать: Параметры приложения</a>
</li>
<li>
<a href="#ConsoleParams">Как использовать: Параметры консольной строки</a>
</li>
</ol>
<hr />
<a name="description"></a>
<h3>Описание</h3>
<p>
<strong>ANB Software Делитель Файлов</strong> позволяет разделить файл на n-ое количество файлов заданного
объема без архивации данных, а также потом собрать в единый файл, если вам понадобится.
</p>
<p>
Программа работает в двух режимах: 1) с помощью параметров командной строки; 2) интерактивный режим.
</p>
<hr />
<a name="license"></a>
<h3>ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ (EULA)</h3>
<p>(Версия 1.0)</p>
<h4>ОПРЕДЕЛЕНИЯ</h4>
<p>
ANB Software File Splitter (далее "продукт") - программа и/или компонент программы и/или другое (игра,
изображение, фильм и т.п.), на которое распространяется данное соглашение.
</p>
<p>
Конечный пользователь (далее "вы" или "пользователь") - лицо и/или организация, которое(-ая) использует продукт,
предоставляемый под этой лицензией.
</p>
<p>
Александр Бабаев (далее "Производитель") - лицо и/или организация, которое(-ая) произвело продукт.
</p>
<h4>
ОГРАНИЧЕНИЯ
</h4>
<p>
В некоторых государствах (районах, областях, штатах) не позволяется ограничение или исключение ответственности
за непредвиденный ущерб. Если ваша страна (район, область, штат) не подразумевает ограничение или исключение
ответственности за непредвиденный ущерб, то данное соглашение не может применяться к вам. В этом случае
откажитесь от использования продукта.
</p>
<p>
В некоторых государствах (районах, областях, штатах) не позволяется исключение подразумеваемых гарантий. Если
ваша страна (район, область, штат) не подразумевает исключение подразумеваемых гарантий, то данное соглашение не
может применяться к вам. В этом случае откажитесь от использования продукта.
</p>
<h4>
ПРЕДМЕТ СОГЛАШЕНИЯ
</h4>
<p>
Данное соглашение заключается между Производителем продукта и Пользователем продукта. Данное соглашение
определяет отношения между Производителем и Пользователем, возникающие при использовании продукта.
</p>
<h4>
ЛИЦЕНЗИЯ
</h4>
<p>
Продукт распространяется по принципу "AS-IS" ("КАК ЕСТЬ"). Автор не несет НИКАКОЙ ОТВЕТСТВЕННОСТИ в случае
нанесения данной программой физического, материального или любого другого вреда вам и вашему компьютеру. Вы на
свой страх и риск устанавливаете продукт. Производитель и/или Распространитель не несет(-ут) никакой
ответственности за ошибки, неисправности (и т.п.), нанесенные продуктом вашему компьютеру.
</p>
<p>
Вы можете использовать данную программу на свое усмотрение, а также копировать и распространять со ссылкой на
автора и сайт "https://babaev-an.ru/". Вам запрещается копировать, распространять продукт без ссылки на автора и
указанный ранее сайт. Вам запрещается копирование и использование продукта, если устанавливаемая вами копия
продукта не имеет ссылки на автора и указанный ранее сайт. Вам запрещается изменять содержимое продукта,
разбирать, дизассемблировать и изменять продукт, использовать её компоненты в других программах без письменного
соглашения Производителя, удалять или исправлять в продукте любые знаки о праве собственности и/или авторском
праве на продукт.
</p>
<p>
ЕСЛИ ВЫ ЗАГРУЖАЕТЕ, КОПИРУЕТЕ ПРОДУКТ ИЛИ ИСПОЛЬЗУЕТЕ ЕГО КАКИМ-ЛИБО ДРУГИМ СПОСОБОМ, ЭТИМ ВЫ ПОДТВЕРЖДАЕТЕ СВОЕ
СОГЛАСИЕ СОБЛЮДАТЬ УСЛОВИЯ ДАННОГО ЛИЦЕНЗИОННОГО СОГЛАШЕНИЯ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ. ЕСЛИ ВЫ НЕ СОГЛАСНЫ, НЕ
УСТАНАВЛИВАЙТЕ, НЕ КОПИРУЙТЕ И НЕ ИСПОЛЬЗУЙТЕ ПРОДУКТ.
</p>
<h4>
АВТОРСКОЕ ПРАВО
</h4>
<p>
Авторское право на все копии продукта принадлежат Производителю и защищено законодательством РФ и ряда других
стран.
</p>
<h4>
ОГРАНИЧЕННАЯ ГАРАНТИЯ И ПРАВОВАЯ ОГОВОРКА
</h4>
<p>
Вам не дается никаких гарантий. Все ваши возможные требования, притязания и претензии (в том числе и по
качеству) будут НЕПРИЗНАННЫ.
</p>
<h4>
ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ
</h4>
<p>
Вам не дается никаких обязательств. Все ваши возможные требования будут НЕПРИЗНАННЫ.
</p>
<hr />
<a name="split"></a>
<h3>Как использовать: Разделение файлов</h3>
<p>
Операция «Разделение файлов» служит для разбиения некоторого файла (далее, исходный файл) на n частей, заданного
размера. Она требует следующих параметров:
</p>
<ul>
<li>
<code>-fn="Имя файла"</code> - имя исходного файла.
</li>
<li>
<code>-td="Путь"</code> - папка, в которую будут сохранены части файла.
</li>
<li>
<code>-ps=«ЧИСЛО»></code> - размер части файла в байтах.
</li>
</ul>
<p>
В интерактивном режиме пользователь будет опрошен по каждому параметру.
</p>
<p>
Операция «Разделение файлов» может содержать следующие дополнительные параметры разбиения:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - не проверять части на совпадение с контрольными суммами.
</li>
<li>
<code>/DeleteSource</code> - после разбиения удаляется исходный файл.
</li>
<li>
<code>/EncryptInfoFile</code> - нужно ли шифровать файл информации. <strong>ВНИМАНИЕ!</strong> Включение
этого параметра обязывает Вас при сборке указывать в дополнительных параметрах сборки параметр
<code>/DecryptInfoFile</code>. В противном случае, вы словите <strong>код возврата 3</strong> при попытке
собрать файл.
</li>
</ul>
<p>
Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме.
</p>
<p>
Например, нужно разбить файл <code>C:\myFiles\myBigFile.mp4</code> на файлы размером 10 МБайт и сохранить файлы
разбиения в папку <code>C:\myFilesSplited\</code>, удалив исходник, зашифровав файл информации о разбиении и не
выдавая пользователю никаких запросов. Тогда вы должны запустить программу следующим способом:
</p>
<p>
<code>
FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent
</code>
</p>
<hr />
<a name="join"></a>
<h3>Как использовать: Объединение файлов</h3>
<p>
Операция «Объединение файлов» соединяет разбитый ранее с помощью операции «Разделения файла» файл. Она требует
следующих параметров:
</p>
<ul>
<li>
<code>-ifn="Имя файла"</code> - имя файла с информацией о разбиении.
</li>
<li>
<code>-tfn="Путь"</code> - файл, в который нужно собрать разбиение.
</li>
</ul>
<p>
В интерактивном режиме пользователь будет опрошен по каждому параметру.
</p>
<p>
Операция «Объединение файлов» может содержать следующие дополнительные параметры сборки:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - не проверять части на совпадение с контрольными суммами.
</li>
<li>
<code>/DeleteSource</code> - после объединения удаляются файлы разбиения.
</li>
<li>
<code>/DecryptInfoFile</code> - нужно ли дешифровать файл информации. <strong>ВНИМАНИЕ!</strong> Включение
этого параметра обязывает Вас при разбивке указывать в дополнительных параметрах разбиения параметр
<code>/EncryptInfoFile</code>. В противном случае, вы словите <strong>код возврата 3</strong> при попытке
собрать файл.
</li>
<li>
<code>/IgnoreVersion</code> - отключить проверку версии файла информации (НЕ РЕКОМЕНДУЕТСЯ).
</li>
<li>
<code>/SkipCheck</code> - отключить проверку собранного файла на соответствие оригиналу.
</li>
</ul>
<p>
Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме.
</p>
<p>
Например, нужно объединить файл, заданный информацией <code>C:\myFilesSplited\myBigFile.mp4.fsi</code>, в файл
<code>C:\myFiles\myBigFile.mp4</code>, удалив файлы разбиения, дешифровав файл информации о разбиении и отключив
проверку собранного файла на соответствие оригиналу. Тогда вы должны
запустить программу следующим способом:
</p>
<p>
<code>
FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck
</code>
</p>
<hr />
<a name="options"></a>
<h3>Как использовать: Параметры приложения</h3>
<p>
Операция «Параметры приложения» позволяет настроить параметры приложения и работает <strong>только в
интерактивном режиме</strong>. Она требует
следующих параметров:
</p>
<table style="text-align: center; border: 2px solid black;">
<thead>
<tr>
<th>
Параметр
</th>
<th>
Возможные значение
</th>
<th>
Описание
</th>
<th>
Пример
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
language
</td>
<td>
Строка (имя файла языка)
</td>
<td>
Задаёт язык приложения
</td>
<td>
language=russian
</td>
</tr>
</tbody>
</table>
<hr />
<a name="ConsoleParams"></a>
<h3>Как использовать: Параметры консольной строки</h3>
<p>
Для использования программы в режиме параметров командной строки запустите программу, передав параметры
командной строки в формате:
</p>
<p>
<code>
FileSplitter [ОПЕРАЦИЯ] [ПАРАМЕТРЫ ОПЕРАЦИИ] [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] [ТИХИЙ РЕЖИМ]
</code>
</p>
<p>
[ОПЕРАЦИЯ] может принимать следующие значения:
</p>
<ul>
<li>
<code>split</code> - выполнить <a href="#split">операцию разделения</a>.
</li>
<li>
<code>join</code> - выполнить <a href="#join">операцию объединения</a>.
</li>
</ul>
<p>
[ПАРАМЕТРЫ ОПЕРАЦИИ] и [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] описаны в соответствующих разделах справки.
</p>
<p>
[ТИХИЙ РЕЖИМ] работает только в режиме параметров командной строки и включается указанием:
</p>
<ul>
<li>
<code>--silent</code> - наличие этого параметра указывает, что не должны выдаваться никакие запросы
пользователю (так называемый «Тихий режим»).
</li>
</ul>
<p>
Для выключения тихого режима просто не указывайте этот параметр.
</p>
</body>
</html>

View File

@ -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 «<program's folder>\\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"
}

View File

@ -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": "Прервано пользователем"
}

View File

@ -1,7 +1,13 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/UserDictionary/Words/=Babaev/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yandex/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0411_0430_0431_0430_0435_0432/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0411_0430_0431_0430_0435_0432/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0418_0434_0451_0442/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_041F_0430_0440_0441_0435_0440/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0434_0438_0437_0430_0441_0441_0435_043C_0431_043B_0438_0440_043E_0432_0430_0442_044C/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_043E_0431_044A_0435_0434_0438_043D_0451_043D_043D_043E_0433_043E/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_043E_0431_044A_0435_0434_0438_043D_0451_043D_043D_043E_0433_043E/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_043E_0431_044A_0435_0434_0438_043D_0451_043D_043D_044B_0439/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_043E_0431_044A_0435_0434_0438_043D_0451_043D_043D_044B_0439/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_043F_0440_043E_0448_0451_043B/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_0435/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_0435/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_043C_0438/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_043C_0438/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_0445/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0440_0430_0437_0434_0435_043B_0451_043D_043D_044B_0445/@EntryIndexedValue">True</s:Boolean>

View File

@ -0,0 +1,64 @@
using Newtonsoft.Json;
using System.Text;
namespace FileSplitter.Shared.Classes;
/// <summary>
/// Параметры консоли программы
/// </summary>
public sealed class FileSplitterConsoleOptions
{
/// <summary>
/// Конструктор
/// </summary>
public FileSplitterConsoleOptions () => Language = "russian";
/// <summary>
/// Язык приложения
/// </summary>
public string Language { get; set; }
/// <summary>
/// Сохранение параметров в файл
/// </summary>
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();
}
/// <summary>
/// Загрузка параметров из файла
/// </summary>
public void Load ()
{
//Если файла опций не существует
if (!File.Exists("settings.json"))
//- то создаём
Save();
//Открываю файл
StreamReader reader = new("settings.json", Encoding.UTF8);
//Читаю файл
FileSplitterConsoleOptions options =
JsonConvert.DeserializeObject<FileSplitterConsoleOptions>(reader.ReadLine() ?? "[]") ?? new();
//- закрываю файл
reader.Close();
//- освобождаю память
reader.Dispose();
//Устанавливаю параметры
Language = options.Language;
}
}

View File

@ -0,0 +1,134 @@
namespace FileSplitter.Shared.Classes;
/// <summary>
/// Класс json-представления языкового файла программы
/// </summary>
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; }
}

View File

@ -1,62 +1,117 @@
using FileSplitter.Shared.Enums; using FileSplitter.Shared.Enums;
using Newtonsoft.Json;
namespace FileSplitter.Shared.Classes; namespace FileSplitter.Shared.Classes;
public static class Localization public static class Localization
{ {
//Содержимое языкового файла
private static readonly FileSplitterLanguage Language;
/// <summary>
/// Конструктор
/// </summary>
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<FileSplitterLanguage>(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 static string AppTitle => Language.AppTitle;
public const string AppVersion = "Версия: {0}"; public static string AppVersion => Language.AppVersion;
public const string AppCopyrights = "Авторские права (C) {0}, Александр Бабаев."; public static string AppCopyrights => Language.AppCopyrights;
//Сообщения //Сообщения
public const string MessageNoParametersForSplit = public static string MessageNoParametersForSplit => Language.MessageNoParametersForSplit;
"Не заданы параметры разбиения. Информацию о работе с программой смотрите в файле \"Help\\Russian\\Console.html\""; public static string MessageSplitAsk => Language.MessageSplitAsk;
public const string MessageSplitAsk = public static string MessageStartSplit => Language.MessageStartSplit;
"Информация о разбиваемом файле:\n***{0}\n***Размер: {1}\n***Хэш файла: {2}\n***Предполагается разбиение на {3} части(-ей)\nВы хотите начать разбиение? [Y|y - да, Любая другая буква/слово/выражение - нет]"; public static string MessageSplitFilePart => Language.MessageSplitFilePart;
public const string MessageStartSplit = "Запущено разбиение файла {0} на части размером {1} и сохранением их в директории {2}."; public static string MessageSplitComplete => Language.MessageSplitComplete;
public const string MessageSplitFilePart = "Идёт обработка части {0} из {1}..."; public static string MessageHashCheckStart => Language.MessageHashCheckStart;
public const string MessageSplitComplete = "Разбиение файла {0} завершено!"; public static string MessageHashCheckFail => Language.MessageHashCheckFail;
public const string MessageHashCheckStart = "Начинаю проверку хэша разбиения"; public static string MessageHashCheckComplete => Language.MessageHashCheckComplete;
public const string MessageHashCheckFail = "К сожалению, файл \"{0}\" не прошёл проверку хэша!"; public static string MessageJoinAsk => Language.MessageJoinAsk;
public const string MessageHashCheckComplete = "Проверка хэша завершена!"; public static string MessageStartJoin => Language.MessageStartJoin;
public const string MessageJoinAsk = "Вы хотите начать сборку файла {0}? [Y|y - да, любая другая буква/слово/выражение - нет]"; public static string MessageJoinUnsupportedFile => Language.MessageJoinUnsupportedFile;
public const string MessageStartJoin = "Запущено объединение файлов, заданных файлом информации {0}, в файл {1}."; public static string MessageJoinUnknownFile => Language.MessageJoinUnknownFile;
public const string MessageJoinUnsupportedFile = "К сожалению, версия файла информации {0} не поддерживается!"; public static string MessageJoinHashError => Language.MessageJoinHashError;
public const string MessageJoinUnknownFile = "Не могу прочитать файл информации! Возможно он зашифрован?"; public static string MessageJoinCheckError => Language.MessageJoinCheckError;
public const string MessageJoinHashError = "К сожалению, разделённые файлы не прошли проверку. Возможно они повреждены?"; public static string MessageJoinFilePart => Language.MessageJoinFilePart;
public const string MessageJoinCheckError = public static string MessageJoinComplete => Language.MessageJoinComplete;
"К сожалению, объединённый файл не прошли проверку корректности объединения. Возможно были какие-либо ошибки?"; public static string MessagePleaseWaitToReady => Language.MessagePleaseWaitToReady;
public const string MessageJoinFilePart = "Идёт обработка части {0} из {1}...";
public const string MessageJoinComplete = "Объединение файла {0} завершено!";
//Сообщения интерактивного режима //Сообщения интерактивного режима
public const string InteractiveStartAsk = "Выберете одно из действий:\n* S|s - разбиение\n* J|j - объединение\n* E|e - выход\nВаш выбор:"; public static string InteractiveStartAsk => Language.InteractiveStartAsk;
public const string InteractiveWrongInput = "Выбрано неизвестное действие!"; public static string InteractiveWrongInput => Language.InteractiveWrongInput;
public const string InteractiveOperationFinish = "Операция завершена с кодом: {0}"; public static string InteractiveOperationFinish => Language.InteractiveOperationFinish;
public const string InteractiveSplitFileNameAsk = "Введите имя разбиваемого файла (или перетащите его сюда):"; public static string InteractiveFileNameNotExist => Language.InteractiveFileNameNotExist;
public const string InteractiveFileNameNotExist = "Файл не существует! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]"; public static string InteractiveFileNameExist => Language.InteractiveFileNameExist;
public const string InteractiveSplitFileNameResult = "Для разбиения выбран файл: {0}";
public const string InteractiveSplitTargetDirAsk = "Выберете папку, куда следует сохранить части файла (или оставьте пустым, чтобы использовать папку разбиваемого файла):"; public static string InteractiveSplitFileNameAsk => Language.InteractiveSplitFileNameAsk;
public const string InteractiveSplitTargetDirResult = "Файлы разбиения будут сохранены в папке: {0}"; public static string InteractiveSplitFileNameResult => Language.InteractiveSplitFileNameResult;
public const string InteractiveSplitPartSizeAsk = "Введите размер части (в байтах):"; public static string InteractiveSplitTargetDirAsk => Language.InteractiveSplitTargetDirAsk;
public const string InteractiveSplitPartSizeAsk2 = "Вы выбрали размер части {0}. Всё правильно? [Y|y - да, продолжить, любая другая буква - нет, повторить ввод]"; public static string InteractiveSplitTargetDirResult => Language.InteractiveSplitTargetDirResult;
public const string InteractiveSplitPartSizeResult = "Выбран размер части: {0}"; public static string InteractiveSplitPartSizeAsk => Language.InteractiveSplitPartSizeAsk;
public const string InteractiveSplitOptionsAsk = "Введите дополнительные параметры разбиения (разделитель - пробел):"; public static string InteractiveSplitPartSizeAsk2 => Language.InteractiveSplitPartSizeAsk2;
public const string InteractiveSplitOptionsResult = "Выбраны дополнительные параметры: [{0}]"; 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() public static List<(FsExitCode, string)> ExitCodeNames { get; }
{
(FsExitCode.ecAllDone, "Успешно завершено"),
(FsExitCode.ecInvalidParameters, "Неверные параметры"),
(FsExitCode.ecUserAborted, "Прервано пользователем"),
(FsExitCode.ecUnknownInfoFile, "Неизвестный файл информации о разбиении"),
(FsExitCode.ecInfoVersionUnsupported, "Версия файла информации о разбиении не поддерживается"),
(FsExitCode.ecSplitFileHashError, "Ошибка проверки хэш-суммы разделённых файлов"),
(FsExitCode.ecTargetFileCheckError, "Ошибка проверки целостности собираемого файла")
};
} }

View File

@ -6,6 +6,16 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<AssemblyName>FileSplitterShared</AssemblyName> <AssemblyName>FileSplitterShared</AssemblyName>
<RootNamespace>FileSplitter.Shared</RootNamespace> <RootNamespace>FileSplitter.Shared</RootNamespace>
<Title>FileSplitted Shared Library</Title>
<Version>2023.04.16</Version>
<Authors>Alexander Babaev</Authors>
<Company />
<Product>ANB Software FileSplitter</Product>
<Description>Support library for ANB Software FileSplitter</Description>
<Copyright>Alexander Babaev</Copyright>
<PackageProjectUrl>https://git.babaev-an.ru/babaev-an/FileSplitter</PackageProjectUrl>
<RepositoryUrl>https://git.babaev-an.ru/babaev-an/FileSplitter</RepositoryUrl>
<NeutralLanguage>ru</NeutralLanguage>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

Binary file not shown.

View File

@ -0,0 +1,369 @@
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>«ANB Software File Splitter» help</title>
</head>
<body>
<h1>
ANB Software File Splitter
</h1>
<h2>
Version 0.5 (2023.04.16)
<br />
Copyrights &copy; 2023 by Alewxander Babaev.
</h2>
<hr />
<a name="toc"></a>
<h3>Content</h3>
<ol>
<li>
<a href="#description">Description</a>
</li>
<li>
<a href="#license">License</a>
</li>
<li>
<a href="#split">How to use: Split file</a>
</li>
<li>
<a href="#join">How to use: Join Files</a>
</li>
<li>
<a href="#options">How to use: Application Parameters</a>
</li>
<li>
<a href="#ConsoleParams">How to use: Console Line Parameters</a>
</li>
</ol>
<hr />
<a name="description"></a>
<h3>Description</h3>
<p>
<strong>ANB Software File Splitter</strong> 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.
</p>
<p>
The program works in two modes: 1) using command line parameters; 2) interactive mode.
</p>
<hr />
<a name="license"></a>
<h3>END USER LICENSE AGREEMENT (EULA)</h3>
<p>(Version 1.0)</p>
<h4>DEFINITIONS</h4>
<p>
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.
</p>
<p>
End User (hereinafter referred to as "you" or "user") is a person and/or organization that uses the product,
provided under this license.
</p>
<p>
Alexander Babaev (hereinafter referred to as "Manufacturer") - the person and/or organization that produced the
product.
</p>
<h4>
LIMITATIONS
</h4>
<p>
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.
</p>
<p>
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.
</p>
<h4>
SUBJECT OF THE AGREEMENT
</h4>
<p>
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.
</p>
<h4>
LICENSE
</h4>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h4>
COPYRIGHT
</h4>
<p>
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.
</p>
<h4>
LIMITED WARRANTY AND DISCLAIMER
</h4>
<p>
You are not given any guarantees. All your possible demands, claims and claims (including on quality) will be
UNRECOGNIZED.
</p>
<h4>
LIMITATION OF LIABILITY
</h4>
<p>
You are not given any obligations. All your possible requirements will be UNRECOGNIZED.
</p>
<hr />
<a name="split"></a>
<h3>How to use: Split file</h3>
<p>
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:
</p>
<ul>
<li>
<code>-fn="file name"</code> - name of the source file.
</li>
<li>
<code>-td="path"</code> - the folder where the parts of the file will be saved.
</li>
<li>
<code>-ps=«number»</code> - the size of a part of the file in bytes.
</li>
</ul>
<p>
In interactive mode, the user will be interviewed for each parameter.
</p>
<p>
The "File Splitting" operation may contain the following additional splitting parameters:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - don't check parts for matching checksums.
</li>
<li>
<code>/DeleteSource</code> - after splitting, the source file is deleted.
</li>
<li>
<code>/EncryptInfoFile</code> - whether the information file needs to be encrypted.
<strong>ATTENTION!</strong> Enabling this parameter obliges you to specify the parameter in the additional
assembly parameters during assembly <code>/DecryptInfoFile</code>. Otherwise, you will get <strong> return
code 3</strong> when trying assemble the file.
</li>
</ul>
<p>
Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode.
</p>
<p>
For example, you need to split the <code>C file:\MyFiles\myBigFile.mp4</code> to 10 MB files and save files
partitions to the <code>C folder:\myFilesSplited\</code> 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:
</p>
<p>
<code>
FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent
</code>
</p>
<hr />
<a name="join"></a>
<h3>How to use: Join Files</h3>
<p>
The "Join files" operation connects the file that was previously split using the "Split File" operation. She
demands the following parameters:
</p>
<ul>
<li>
<code>-ifn="Имя файла"</code> - the name of the file with information about the split.
</li>
<li>
<code>-tfn="Путь"</code> - the file to build the split into.
</li>
</ul>
<p>
In interactive mode, the user will be interviewed for each parameter.
</p>
<p>
The "Join Files" operation may contain the following additional assembly parameters:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - don't check parts for matching checksums.
</li>
<li>
<code>/DeleteSource</code> - after joining, the split files are deleted.
</li>
<li>
<code>/DecryptInfoFile</code> - whether to decrypt the information file. <strong>ATTENTION!</strong>
Enabling this parameter obliges you to specify the parameter in the additional splitting parameters when
splitting <code>/EncryptInfoFile</code>. Otherwise, you will get <strong> return code 3</strong> when trying
joining the file.
</li>
<li>
<code>/IgnoreVersion</code> - disable checking the version of the information file (NOT RECOMMENDED).
</li>
<li>
<code>/SkipCheck</code> - disable checking the collected file for compliance with the original.
</li>
</ul>
<p>
Parameters are entered separated by a space, both in command-line parameters mode and in interactive mode.
</p>
<p>
For example, you need to merge the file specified by the information
<code>C:\myFilesSplitter\myBigFile.mp4.fsi</code>, to file <code>C:\MyFiles\myBigFile.mp4</code> 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:
</p>
<p>
<code>
FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck
</code>
</p>
<hr />
<a name="options"></a>
<h3>How to use: Application Parameters</h3>
<p>
The operation "Application Parameters" allows you to configure application parameters and works <strong> only in
interactive mode</strong>. It requires the following parameters:
</p>
<table style="text-align: center; border: 2px solid black;">
<thead>
<tr>
<th>
Parameter
</th>
<th>
Possible values
</th>
<th>
Description
</th>
<th>
Example
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
language
</td>
<td>
String (language file name)
</td>
<td>
Sets the application language
</td>
<td>
language=russian
</td>
</tr>
</tbody>
</table>
<hr />
<a name="ConsoleParams"></a>
<h3>How to use: Console Line Parameters</h3>
<p>
To use the program in command line parameters mode, run the program by passing command line parameters in the
format:
</p>
<p>
<code>
FileSplitter [OPERATION] [OPERATION PARAMETERS] [ADDITIONAL PARAMETERS] [SILENT MODE]
</code>
</p>
<p>
[OPERATION] can take the following values:
</p>
<ul>
<li>
<code>split</code> - perform <a href="#split">split operation</a>.
</li>
<li>
<code>join</code> - perform <a href="#join">join operation</a>.
</li>
</ul>
<p>
[OPERATION PARAMETERS] and [ADDITIONAL PARAMETERS] are described in the corresponding help sections.
</p>
<p>
[SILENT MODE] works only in command line parameters mode and is enabled by specifying:
</p>
<ul>
<li>
<code>--silent</code> - the presence of this parameter indicates that no requests should be issued to the
user (the so-called "Silent mode").
</li>
</ul>
<p>
To turn off the silent mode, simply do not specify this parameter.
</p>
</body>
</html>

View File

@ -0,0 +1,372 @@
<!DOCTYPE html>
<html lang="ru" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Справка по программе «ANB Software Делитель файлов»</title>
</head>
<body>
<h1>
ANB Software Делитель файлов
</h1>
<h2>
Версия 0.5 (2023.04.16)
<br />
Авторские права &copy; 2023, Александр Бабаев.
</h2>
<hr />
<a name="toc"></a>
<h3>Содержание</h3>
<ol>
<li>
<a href="#description">Описание</a>
</li>
<li>
<a href="#license">Лицензия</a>
</li>
<li>
<a href="#split">Как использовать: Разделение файлов</a>
</li>
<li>
<a href="#join">Как использовать: Объединение файлов</a>
</li>
<li>
<a href="#options">Как использовать: Параметры приложения</a>
</li>
<li>
<a href="#ConsoleParams">Как использовать: Параметры консольной строки</a>
</li>
</ol>
<hr />
<a name="description"></a>
<h3>Описание</h3>
<p>
<strong>ANB Software Делитель Файлов</strong> позволяет разделить файл на n-ое количество файлов заданного
объема без архивации данных, а также потом собрать в единый файл, если вам понадобится.
</p>
<p>
Программа работает в двух режимах: 1) с помощью параметров командной строки; 2) интерактивный режим.
</p>
<hr />
<a name="license"></a>
<h3>ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ (EULA)</h3>
<p>(Версия 1.0)</p>
<h4>ОПРЕДЕЛЕНИЯ</h4>
<p>
ANB Software File Splitter (далее "продукт") - программа и/или компонент программы и/или другое (игра,
изображение, фильм и т.п.), на которое распространяется данное соглашение.
</p>
<p>
Конечный пользователь (далее "вы" или "пользователь") - лицо и/или организация, которое(-ая) использует продукт,
предоставляемый под этой лицензией.
</p>
<p>
Александр Бабаев (далее "Производитель") - лицо и/или организация, которое(-ая) произвело продукт.
</p>
<h4>
ОГРАНИЧЕНИЯ
</h4>
<p>
В некоторых государствах (районах, областях, штатах) не позволяется ограничение или исключение ответственности
за непредвиденный ущерб. Если ваша страна (район, область, штат) не подразумевает ограничение или исключение
ответственности за непредвиденный ущерб, то данное соглашение не может применяться к вам. В этом случае
откажитесь от использования продукта.
</p>
<p>
В некоторых государствах (районах, областях, штатах) не позволяется исключение подразумеваемых гарантий. Если
ваша страна (район, область, штат) не подразумевает исключение подразумеваемых гарантий, то данное соглашение не
может применяться к вам. В этом случае откажитесь от использования продукта.
</p>
<h4>
ПРЕДМЕТ СОГЛАШЕНИЯ
</h4>
<p>
Данное соглашение заключается между Производителем продукта и Пользователем продукта. Данное соглашение
определяет отношения между Производителем и Пользователем, возникающие при использовании продукта.
</p>
<h4>
ЛИЦЕНЗИЯ
</h4>
<p>
Продукт распространяется по принципу "AS-IS" ("КАК ЕСТЬ"). Автор не несет НИКАКОЙ ОТВЕТСТВЕННОСТИ в случае
нанесения данной программой физического, материального или любого другого вреда вам и вашему компьютеру. Вы на
свой страх и риск устанавливаете продукт. Производитель и/или Распространитель не несет(-ут) никакой
ответственности за ошибки, неисправности (и т.п.), нанесенные продуктом вашему компьютеру.
</p>
<p>
Вы можете использовать данную программу на свое усмотрение, а также копировать и распространять со ссылкой на
автора и сайт "https://babaev-an.ru/". Вам запрещается копировать, распространять продукт без ссылки на автора и
указанный ранее сайт. Вам запрещается копирование и использование продукта, если устанавливаемая вами копия
продукта не имеет ссылки на автора и указанный ранее сайт. Вам запрещается изменять содержимое продукта,
разбирать, дизассемблировать и изменять продукт, использовать её компоненты в других программах без письменного
соглашения Производителя, удалять или исправлять в продукте любые знаки о праве собственности и/или авторском
праве на продукт.
</p>
<p>
ЕСЛИ ВЫ ЗАГРУЖАЕТЕ, КОПИРУЕТЕ ПРОДУКТ ИЛИ ИСПОЛЬЗУЕТЕ ЕГО КАКИМ-ЛИБО ДРУГИМ СПОСОБОМ, ЭТИМ ВЫ ПОДТВЕРЖДАЕТЕ СВОЕ
СОГЛАСИЕ СОБЛЮДАТЬ УСЛОВИЯ ДАННОГО ЛИЦЕНЗИОННОГО СОГЛАШЕНИЯ С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ. ЕСЛИ ВЫ НЕ СОГЛАСНЫ, НЕ
УСТАНАВЛИВАЙТЕ, НЕ КОПИРУЙТЕ И НЕ ИСПОЛЬЗУЙТЕ ПРОДУКТ.
</p>
<h4>
АВТОРСКОЕ ПРАВО
</h4>
<p>
Авторское право на все копии продукта принадлежат Производителю и защищено законодательством РФ и ряда других
стран.
</p>
<h4>
ОГРАНИЧЕННАЯ ГАРАНТИЯ И ПРАВОВАЯ ОГОВОРКА
</h4>
<p>
Вам не дается никаких гарантий. Все ваши возможные требования, притязания и претензии (в том числе и по
качеству) будут НЕПРИЗНАННЫ.
</p>
<h4>
ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ
</h4>
<p>
Вам не дается никаких обязательств. Все ваши возможные требования будут НЕПРИЗНАННЫ.
</p>
<hr />
<a name="split"></a>
<h3>Как использовать: Разделение файлов</h3>
<p>
Операция «Разделение файлов» служит для разбиения некоторого файла (далее, исходный файл) на n частей, заданного
размера. Она требует следующих параметров:
</p>
<ul>
<li>
<code>-fn="Имя файла"</code> - имя исходного файла.
</li>
<li>
<code>-td="Путь"</code> - папка, в которую будут сохранены части файла.
</li>
<li>
<code>-ps=«ЧИСЛО»></code> - размер части файла в байтах.
</li>
</ul>
<p>
В интерактивном режиме пользователь будет опрошен по каждому параметру.
</p>
<p>
Операция «Разделение файлов» может содержать следующие дополнительные параметры разбиения:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - не проверять части на совпадение с контрольными суммами.
</li>
<li>
<code>/DeleteSource</code> - после разбиения удаляется исходный файл.
</li>
<li>
<code>/EncryptInfoFile</code> - нужно ли шифровать файл информации. <strong>ВНИМАНИЕ!</strong> Включение
этого параметра обязывает Вас при сборке указывать в дополнительных параметрах сборки параметр
<code>/DecryptInfoFile</code>. В противном случае, вы словите <strong>код возврата 3</strong> при попытке
собрать файл.
</li>
</ul>
<p>
Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме.
</p>
<p>
Например, нужно разбить файл <code>C:\myFiles\myBigFile.mp4</code> на файлы размером 10 МБайт и сохранить файлы
разбиения в папку <code>C:\myFilesSplited\</code>, удалив исходник, зашифровав файл информации о разбиении и не
выдавая пользователю никаких запросов. Тогда вы должны запустить программу следующим способом:
</p>
<p>
<code>
FileSplitter split -fn="C:\myFiles\myBigFile.mp4" -td="C:\myFilesSplited" -ps=10485760 /DeleteSource /EncryptInfoFile --silent
</code>
</p>
<hr />
<a name="join"></a>
<h3>Как использовать: Объединение файлов</h3>
<p>
Операция «Объединение файлов» соединяет разбитый ранее с помощью операции «Разделения файла» файл. Она требует
следующих параметров:
</p>
<ul>
<li>
<code>-ifn="Имя файла"</code> - имя файла с информацией о разбиении.
</li>
<li>
<code>-tfn="Путь"</code> - файл, в который нужно собрать разбиение.
</li>
</ul>
<p>
В интерактивном режиме пользователь будет опрошен по каждому параметру.
</p>
<p>
Операция «Объединение файлов» может содержать следующие дополнительные параметры сборки:
</p>
<ul>
<li>
<code>/NoCheckHash</code> - не проверять части на совпадение с контрольными суммами.
</li>
<li>
<code>/DeleteSource</code> - после объединения удаляются файлы разбиения.
</li>
<li>
<code>/DecryptInfoFile</code> - нужно ли дешифровать файл информации. <strong>ВНИМАНИЕ!</strong> Включение
этого параметра обязывает Вас при разбивке указывать в дополнительных параметрах разбиения параметр
<code>/EncryptInfoFile</code>. В противном случае, вы словите <strong>код возврата 3</strong> при попытке
собрать файл.
</li>
<li>
<code>/IgnoreVersion</code> - отключить проверку версии файла информации (НЕ РЕКОМЕНДУЕТСЯ).
</li>
<li>
<code>/SkipCheck</code> - отключить проверку собранного файла на соответствие оригиналу.
</li>
</ul>
<p>
Параметры вводятся через пробел, как в режиме параметров командной строки, так и в интерактивномрежиме.
</p>
<p>
Например, нужно объединить файл, заданный информацией <code>C:\myFilesSplited\myBigFile.mp4.fsi</code>, в файл
<code>C:\myFiles\myBigFile.mp4</code>, удалив файлы разбиения, дешифровав файл информации о разбиении и отключив
проверку собранного файла на соответствие оригиналу. Тогда вы должны
запустить программу следующим способом:
</p>
<p>
<code>
FileSplitter join -ifn="C:\myFilesSplited\myBigFile.mp4.fsi" -tfn="C:\myFiles\myBigFile.mp4" /DeleteSource /DecryptInfoFile /SkipCheck
</code>
</p>
<hr />
<a name="options"></a>
<h3>Как использовать: Параметры приложения</h3>
<p>
Операция «Параметры приложения» позволяет настроить параметры приложения и работает <strong>только в
интерактивном режиме</strong>. Она требует
следующих параметров:
</p>
<table style="text-align: center; border: 2px solid black;">
<thead>
<tr>
<th>
Параметр
</th>
<th>
Возможные значение
</th>
<th>
Описание
</th>
<th>
Пример
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
language
</td>
<td>
Строка (имя файла языка)
</td>
<td>
Задаёт язык приложения
</td>
<td>
language=russian
</td>
</tr>
</tbody>
</table>
<hr />
<a name="ConsoleParams"></a>
<h3>Как использовать: Параметры консольной строки</h3>
<p>
Для использования программы в режиме параметров командной строки запустите программу, передав параметры
командной строки в формате:
</p>
<p>
<code>
FileSplitter [ОПЕРАЦИЯ] [ПАРАМЕТРЫ ОПЕРАЦИИ] [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] [ТИХИЙ РЕЖИМ]
</code>
</p>
<p>
[ОПЕРАЦИЯ] может принимать следующие значения:
</p>
<ul>
<li>
<code>split</code> - выполнить <a href="#split">операцию разделения</a>.
</li>
<li>
<code>join</code> - выполнить <a href="#join">операцию объединения</a>.
</li>
</ul>
<p>
[ПАРАМЕТРЫ ОПЕРАЦИИ] и [ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ] описаны в соответствующих разделах справки.
</p>
<p>
[ТИХИЙ РЕЖИМ] работает только в режиме параметров командной строки и включается указанием:
</p>
<ul>
<li>
<code>--silent</code> - наличие этого параметра указывает, что не должны выдаваться никакие запросы
пользователю (так называемый «Тихий режим»).
</li>
</ul>
<p>
Для выключения тихого режима просто не указывайте этот параметр.
</p>
</body>
</html>

View File

@ -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 «<program's folder>\\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"
}

View File

@ -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": "Прервано пользователем"
}

1
output/x32/settings.json Normal file
View File

@ -0,0 +1 @@
{"Language":"russian"}

Binary file not shown.