Дан файл с текстом на русском языке. Подсчитать, сколько слов начинается с указанной буквой. Результат записать в отдельный файл

Написал рабочую программу, но почему то она не хочет работать с русским языком, вместо слов выдает вопросики, с английскими символами все работает отлично. Пробовал вместо Encoding.Default писать Encoding.GetEncoding(1251), но VS выдавала "no data is available for encoding 1251"

static void Main(string[] args)
{
    string inPath = "path";
    Console.WriteLine();
    Console.WriteLine("Содержимое входного файла - " + inPath);
    Console.WriteLine("Введите букву");
    char c = Convert.ToChar(Console.ReadLine());
    int count = 0;
    string text = System.IO.File.ReadAllText(@"path", Encoding.Default);
    string[] tx = text.Split(' ');
    for (int i = 0; i < tx.Length; i++)
    {
        Console.WriteLine(tx[i]);
    }
    for (int i = 0; i < tx.Length; i++)
    {
        char[] ch = tx[i].ToCharArray();
        if (ch[0] == c)
            count++;
    }
    StreamWriter sw = new StreamWriter("path output");
    sw.WriteLine(+count);
    sw.Close();
    Console.WriteLine("Количество слов начинающихся с '{0}' = {1}", c, count);
    Console.ReadKey();
}

Ответы (1 шт):

Автор решения: MRXIT
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Application
{
    internal sealed class Core
    {
        private static async Task Main()
        {
            try
            {
                char? letterUser = null;

                while (true)
                {
                    Console.Write("Enter letter: ");
                    letterUser = Console.ReadLine()?[0];

                    if (letterUser is not null)
                        break;
                }

                string[] bufferData = (await FileWorkExtensions.ReadFromFile(FileWorkExtensions.GetPathApplication("data.txt"))).Split(' ');

                if (bufferData.Length == 0)
                    throw new FileLoadException(nameof(bufferData));

                int countFindLetter = 0;
                for (int index = 0; index < bufferData.Length; index++)
                {
                    if (bufferData[index].StartsWith((char)letterUser))
                        countFindLetter++;
                }

                Console.WriteLine($"Find letters: {countFindLetter}");
                Console.ReadLine();
            }
            catch (Exception exception)
            {
                Console.WriteLine($"Message: {exception.Message}\nStack: {exception.StackTrace}");
                Console.ReadLine();

                Environment.Exit(0);
            }
        }
    }

    internal static class FileWorkExtensions
    {
        public static async Task WriteToFile(string pathName, string data, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(pathName))
                throw new ArgumentNullException(nameof(pathName));

            using (FileStream fileStream = new FileStream(pathName, FileMode.OpenOrCreate))
            {
                fileStream.Seek(0, SeekOrigin.End);
                await fileStream.WriteAsync(Encoding.Default.GetBytes(data).AsMemory(0, data.Length), cancellationToken);
            }
        }

        public static async Task<string> ReadFromFile(string pathName, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(pathName))
                throw new ArgumentNullException(nameof(pathName));

            byte[] buffer;

            using (FileStream fileStream = new FileStream(pathName, FileMode.OpenOrCreate))
            {
                buffer = new byte[fileStream.Length];
                await fileStream.ReadAsync(buffer.AsMemory(0, buffer.Length), cancellationToken);
            }

            return Encoding.Default.GetString(buffer, 0, buffer.Length);
        }

        public static string GetPathApplication(string fileName)
        {
            string applicationDomainDirectory = AppDomain.CurrentDomain.BaseDirectory;
            return Path.Combine(applicationDomainDirectory, fileName);
        }
    }
}

Файл data.txt сохранить в формате UTF8

→ Ссылка