C# 无法在带有 < 的提示符下运行

C# cant runt on prompt with <

所以,我编写了一个程序,它从文件中获取数据并对其进行处理并给出答案。我收到一个有点令人困惑的错误。如果我在命令提示符下调用程序如下: test.exe < indata.txt 没有任何反应,如果我跳过 < 即调用程序为: test.txt indata.txt 它工作正常.如果我在数据文件中用 double 调用它,它也会起作用。喜欢:test.txt < indata.txt indata.txt。这就像 < 标记跳过以下条目。

static void Main(string[] args)
{
    int revolter = 0;
    string[] buffer_array = new string[2000];
    string path = "./";
     

    if (args.Length == 0)
    {
        string read_string = System.Console.ReadLine();
        buffer_array = read_string.Split(' ');
    }
    else
    {
        path += args[0];
        System.Console.WriteLine(path);
        StreamReader read_string = File.OpenText(path);
        string s = read_string.ReadToEnd();
        buffer_array = s.Split('\n');
    }
}

编辑:拼写

如果要按照您的描述调用程序(使用 < filename.txt 命令行),文件的内容将在 STDIN 上可用。如果您的程序以文件名作为参数被调用,您的代码就是您将要执行的代码。

您可以使用这样的代码来处理 STDIN 上的文本:


using System;
using System.IO;


namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            TextReader input = Console.In;
            String inpText = input.ReadToEnd();
            foreach(String line in inpText.Split('\n')) {
                Console.WriteLine("+++" + line);
            }
        }
    }
}

对于这样的输入:

This
Is
A
Multiline
Text File

使用 ConsoleApp1.exe < input.txt 你得到:

+++This
+++Is
+++A
+++Multiline
+++Text File
+++

下面显示了如何创建一个控制台程序,该程序从指定的文件名中读取数据:

  1. 重定向输入 (< infile.txt)
  2. 使用参数指定文件名(-f:<filename>-f:"<filename containing spaces>"
  3. 如果未指定文件名,则提示用户输入文件名

对于用法,运行 以 /? 作为唯一参数的程序。

    static void Main(string[] args)
    {
        string filename = string.Empty;
        string[] buffer = null;
    
        if (Console.IsInputRedirected)
        {
            string data = Console.In.ReadToEnd();
            //Console.WriteLine(data);
    
            //set value
            buffer = data.Split('\n');
        }
        else if (args != null && args.Length > 0)
        {
            foreach (var arg in args)
            {
                //Console.WriteLine("arg: " + arg);
    
                if (arg == "/?")
                {
                    Usage();
                }
                else if (arg.StartsWith("-f"))
                {
                    //Console.WriteLine("arg: '" + arg + "'");
    
                    //set value
                    filename = arg.Substring(3).Trim();
    
                    if (!String.IsNullOrEmpty(filename))
                    {
                        if (!System.IO.File.Exists(filename))
                        {
                            Console.Error.WriteLine("Error: File '" + filename + "' doesn't exist.");
                            //return;
                        }
                        else
                        {
                            //read data 
                            buffer = System.IO.File.ReadAllLines(filename);
                        }
                    }
                    else
                    {
                        Console.Error.WriteLine("Error: '-f' was specified, but filename wasn't specified (Note: No space is allowed between '-f:' and <filename>)");
                        //return;
                    }
                }
                else
                {
                    Console.Error.WriteLine("Error: Argument '" + arg + "' unknown");
                    Usage();
                }
            }
        }
        else
        {
            do
            {
                Console.Write("Please enter filename ('q' to quit): ");
                filename = Console.ReadLine();
    
                //remove double quotes
                filename = filename.Replace("\"", ""); 
    
                if (filename == "Q" || filename == "q")
                {
                    return;
                }
                else if (!System.IO.File.Exists(filename))
                {
                    Console.Error.WriteLine("Error: File '" + filename + "' doesn't exist.");
                }
                else
                {
                    //read data 
                    buffer = System.IO.File.ReadAllLines(filename);
                    break;
                }
            } while (true);
        }
    
        //display data
        DisplayData(buffer);
    }
    
    static void DisplayData(string[] buffer)
    {
        if (buffer != null)
        {
            foreach (string val in buffer)
            {
                Console.WriteLine(val);
            }
        }
    }
    
    static void Usage()
    {
        StringBuilder sb = new StringBuilder();
        //string exeName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
        string exeName = System.AppDomain.CurrentDomain.FriendlyName;
        sb.AppendFormat("{0}Usage:{0}", System.Environment.NewLine);
        sb.AppendFormat("{0} -f:C:\Temp\Test1.txt{1}", exeName, System.Environment.NewLine);
        sb.AppendFormat("{0} -f:\"C:\Temp\Test 2.txt\"{1}", exeName, System.Environment.NewLine);
    
        Console.Write(sb.ToString());
    }