Javiertxl Ответов: 2

Как использовать флаги в аргументе командной строки для winform C#


Мои классы C# создадут графический интерфейс, который будет принимать csv-файлы и соответственно строить линейный график (см.: C# считывает строку из CSV-файла и строит линейный график для графического кода[^]). В настоящее время мои графики строятся и сохраняются с помощью диалогового окна GUI-файла.

То, что я пытаюсь сделать сейчас, это читайте, стройте планы и сохраняйте вместо этого график использует командную строку (графический интерфейс не требуется), например "graphdemo.exe -f c:\\desktop\\1.csv (путь к csv-файлу) - o c:\\desktop\\1.png (путь к файлу выходного графика)".

Могу ли я узнать, как я могу вызвать свои классы чтения и построения с помощью флага "-f" и сохранить построенный график с помощью флага "-o"?

Спасибо.

Что я уже пробовал:

class Program
    {
        [STAThread]
        public static void Main(string[] args)
        {           
            if (args.Length > 0)
            {
                if (args.Contains("-f")) //-f: Read user-input csv file path and plot line graph
                {
                    for (int i = 1; i < args.Length; i++)
                    {
                        string filepath = args[i]; //Store each file path into an array

                        if (File.Exists(filepath))
                        {
                            string filename = Path.GetFileName(filepath); //Get file name
                            //read csv file from Read class
                            //plot line graph from Plot class

                            Console.WriteLine(filename);
                        }
                        else
                        {
                            Console.WriteLine("\nPlease enter a valid file name. ");
                        }
                    }
                }
                if (args.Contains("-o"))    
                {
                    // -o: Save plotted graph as png image based on user-input path
                }

                else
                {
                    Console.WriteLine("\nPlease enter a valid argument. ");
                }
            }
            else 
            {
                Application.Run(new GraphDemo());   // Show graph GUI
            }
        }
    }
}

2 Ответов

Рейтинг:
20

OriginalGriff

Это не очень хорошая идея: здесь есть довольно много проблем с вашим кодом.
Тривиальные вещи:

string filepath = args[i]; //Store each file path into an array
Нет, это не так. А неправильный комментарий гораздо, гораздо хуже, чем отсутствие комментария.
Главная проблема заключается в том, что вы не учитываете, что произойдет, если пользователь допустит ошибку: что, если он наберет параметры в неправильном порядке.
Хотя это нормально использовать -f и-o, нормальным значением по умолчанию является
exename infile {outfile} {parameters}
Где параметры помечаются, начиная либо с' -', либо с '/'.
То, как я справляюсь с этим, - это предустановка:
string inpath = LoadLastInputFile();
string outpath = inpath;
bool firstFile = true;
foreach (string arg in args)
   {
   if (arg.StartsWith('/') || arg.StartsWith('-'))
      {
      HandleOption(arg);
      }
   else
      {
      if (firstFile)
         {
         if (!File.Exists(arg))
             {
             Console.WriteLine("Input file not found: {0}", arg);
             return;
             }
         inpath = arg;
         outpath = inpath;
         firstFile = false;
         }
      else
         {
         outpath = arg;
         }
      }
   }


Javiertxl

Как бы я применил ваш код для своего сценария? Не знаю, как мне назвать мои классы чтения и построения, а также убедиться, что входные данные после "-f" используются для чтения и построения графика, в то время как "-o" - это выходной график png.

Рейтинг:
2