Считывание данных из файла с последующей конвертацией в байт код
Написал небольшой код для конвертирования символов из файла в десятичный код. Не совсем понимаю, как используя одну функцию, считать сразу несколько файлов (при этом обработка каждого файла производится в отдельном потоке). Прикрепил изображение для полного понимания происходящего.
static void Main(string[] args)
{
Thread my1thread = new Thread(first);
my1thread.Start();
Thread my2thread = new Thread(second);
my2thread.Start();
}
static void first()
{
using (FileStream fstream = File.OpenRead($"1.txt"))
{
// преобразуем строку в байты
byte[] array = new byte[fstream.Length];
// считываем данные
fstream.Read(array, 0, array.Length);
for (int i = 0; i < array.Length; i++)
Console.WriteLine(Convert.ToByte(array[i]).ToString());
// декодируем байты в строку
string textFromFile = System.Text.Encoding.Default.GetString(array);
Console.WriteLine($"Текст из файла: {textFromFile}");
}
}
static void second()
{
using (FileStream fstream = File.OpenRead($"2.txt"))
{
// преобразуем строку в байты
byte[] array = new byte[fstream.Length];
// считываем данные
fstream.Read(array, 0, array.Length);
for (int i = 0; i < array.Length; i++)
Console.WriteLine(Convert.ToByte(array[i]).ToString());
// декодируем байты в строку
string textFromFile = System.Text.Encoding.Default.GetString(array);
Console.WriteLine($"Текст из файла: {textFromFile}");
}
}
Ответы (1 шт):
DRY - Don't Repeat Yourself, что означет "не повторяй себя". Общее правило для всех разработчиков, независимо от языка программирования. Если вам приходится писать один и тот же код несколько раз, значит что-то пошло не так, и вам следует пересмотреть подход к разработке данной части приложения.
Например метод может принимать в себя путь к файлу как аргумент.
Далее, если вам надо суммировать все коды символов, то можно файл просто читать как двоичный. При этом считывать весь файл в массив нет никакой необходимости, можно просто читать побайтово.
static int CalculateChecksum(string path)
{
int sum = 0;
using (FileStream fs = File.OpenRead(path))
{
int b;
while ((b = fs.ReadByte()) > 0) // ReadByte вернет -1, когда конец файла
{
sum += b;
}
}
return sum;
}
А запустить можно так
string[] fileNames = new string[] { "1.txt", "2.txt", "3.txt", "4.txt", "5.txt" };
foreach (string fileName in fileNames)
{
Thread thread = new Thread(() => Console.WriteLine($"Сумма для файла {fileName}: {CalculateChecksum(fileName)}"));
thread.Start();
}
Только стоит учесть, что если файл большой, то переменная sum может переполниться.
