Считывание данных из файла с последующей конвертацией в байт код

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

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 шт):

Автор решения: aepot

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 может переполниться.

→ Ссылка