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



所以,我写了一个程序,它从文件中获取数据并处理它并给出答案。我得到了一个错误,有点令人困惑。如果我在命令提示符中调用该程序,如下所示:如果我跳过<即调用程序为:test.txt xmlns:即调用程序为="#unknown">

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');
}
}

编辑:拼写

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

  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());
}

如果程序将像您所描述的那样被调用(使用< 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);
}
}
}
}

对于这样的输入:

<>之前这是一个多行文本文件使用ConsoleApp1.exe < input.txt你得到:

<>前+ + ++ + ++ + ++ + +多行+ + +文本文件+ + +

相关内容

最新更新