109 lines
3.9 KiB
C#
109 lines
3.9 KiB
C#
using System;
|
||
using System.IO;
|
||
using System.Text;
|
||
|
||
namespace TextFileSplitter
|
||
{
|
||
class Program
|
||
{
|
||
static void SplitFile(string inputFile, int maxLines = 1023, string neededExt = null)
|
||
{
|
||
// Читаем все строки исходного файла
|
||
string[] lines;
|
||
try
|
||
{
|
||
lines = File.ReadAllLines(inputFile, Encoding.UTF8);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine($"Ошибка при чтении файла: {ex.Message}");
|
||
return;
|
||
}
|
||
|
||
// Если строк меньше или равно maxLines, ничего не делаем
|
||
if (lines.Length <= maxLines)
|
||
{
|
||
Console.WriteLine($"Файл содержит {lines.Length} строк (не больше {maxLines}), разделение не требуется.");
|
||
return;
|
||
}
|
||
|
||
// Определяем базовое имя и расширение файла
|
||
string baseName = Path.GetFileNameWithoutExtension(inputFile);
|
||
string directory = Path.GetDirectoryName(inputFile);
|
||
string ext = Path.GetExtension(inputFile);
|
||
|
||
if (!string.IsNullOrEmpty(neededExt))
|
||
{
|
||
ext = neededExt;
|
||
}
|
||
|
||
// Если файл находится в корне диска, directory может быть null
|
||
if (string.IsNullOrEmpty(directory))
|
||
{
|
||
directory = ".";
|
||
}
|
||
|
||
// Разделяем файл на части
|
||
int partNum = 1;
|
||
for (int i = 0; i < lines.Length; i += maxLines)
|
||
{
|
||
// Формируем имя нового файла
|
||
string outputFile = Path.Combine(directory, $"{baseName}_{partNum}{ext}");
|
||
|
||
// Определяем количество строк для текущей части
|
||
int linesToTake = Math.Min(maxLines, lines.Length - i);
|
||
string[] partLines = new string[linesToTake];
|
||
Array.Copy(lines, i, partLines, 0, linesToTake);
|
||
|
||
// Записываем часть строк в новый файл
|
||
try
|
||
{
|
||
File.WriteAllLines(outputFile, partLines, Encoding.UTF8);
|
||
Console.WriteLine($"Создан файл {outputFile} с {partLines.Length} строками");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine($"Ошибка при записи файла {outputFile}: {ex.Message}");
|
||
}
|
||
|
||
partNum++;
|
||
}
|
||
}
|
||
|
||
static void Main(string[] args)
|
||
{
|
||
if (args.Length > 0)
|
||
{
|
||
foreach (string line in args)
|
||
SplitFile(line, neededExt: ".bat");
|
||
return;
|
||
}
|
||
try
|
||
{
|
||
Console.Write("Введите путь к файлу для разделения: ");
|
||
string inputFile = Console.ReadLine();
|
||
|
||
if (string.IsNullOrEmpty(inputFile))
|
||
{
|
||
Console.WriteLine("Путь к файлу не может быть пустым.");
|
||
return;
|
||
}
|
||
|
||
if (!File.Exists(inputFile))
|
||
{
|
||
Console.WriteLine("Файл не существует.");
|
||
return;
|
||
}
|
||
|
||
SplitFile(inputFile, neededExt: ".bat");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine($"Произошла ошибка: {ex.Message}");
|
||
}
|
||
|
||
Console.WriteLine("Нажмите любую клавишу для выхода...");
|
||
Console.ReadKey();
|
||
}
|
||
}
|
||
} |