Файл Read.AllLines, но может ли пользователь выбрать файл из консольного приложения? - PullRequest
0 голосов
/ 03 марта 2020

Я использую C#, и мне было интересно, есть ли способ попросить пользователя указать имя файла (в консольном приложении) в локальных документах. Я действительно не знаю, как структурировать этот вопрос при поиске в Интернете, но у меня есть код:

   static void Main(string[] args)
    {

        string[] random1 = System.IO.File.ReadAllLines(@"//..Random1.txt");

        foreach (string r1 in random1)
        {
            Console.WriteLine(r1);
        }

Но в идеале я хотел бы что-то вроде:

static void Main(string[] args)
    {
        Console.WriteLine("Enter the name of the file you would like to see")
        // Following the input let's say " Potato.txt " is entered

        string[] chosenFile1 = System.IO.File.ReadAllLines(@"//..Potato.txt");

        foreach (string file in chosenFile1)
        {
            Console.WriteLine(file);
        }

Я не совсем Я уверен, что go об этом, как обычно, зависит от пути к файлам, но я подумал, что этот способ будет более уместным, поскольку разные пользователи с разных устройств могут попробовать это. Надеюсь, что это имеет смысл, вся помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Я бы порекомендовал вам попросить пользователя не для имени файла, а для файла число . Имя файла может быть очень длинным, и обычно пользователю не нужно вводить его, если вы, как программист, можете предоставить какое-то меню.

using System.IO;


    public static void Main(string[] args)
    {
        const string dir = @"e:\2";  // your folder here
        var files = Directory.GetFiles(dir);
        for (var i = 0; i < files.Length; i++)
        {
            Console.WriteLine($"{i}) {Path.GetFileName(files[i])}");
        }

        while (true)
        {
            Console.WriteLine("Enter the number of the file you would like to see or -1 to exit");
            var choice = Console.ReadLine();

            if (int.TryParse(choice, out var index) && index > -2 && index < files.Length)
            {
                if (index == -1)
                    return;

                string[] chosenFile1 = System.IO.File.ReadAllLines(files[index]);
                foreach (string file in chosenFile1)
                {
                    Console.WriteLine(file);
                }
            }
            else
                Console.WriteLine("Bad input. Repeat please.");
        }
    } 
0 голосов
/ 03 марта 2020

Вы можете передать имя файла в .exe, когда выполняете его с терминала (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/command-line-arguments) или использовать Console.ReadLine для чтения ввода в вашей программе (https://docs.microsoft.com/en-us/dotnet/api/system.console.readline?view=netframework-4.8* 1006). *)

...