所以,我写了一个程序,它从文件中获取数据并处理它并给出答案。我得到了一个错误,有点令人困惑。如果我在命令提示符中调用该程序,如下所示:如果我跳过<即调用程序为: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');
}
}
即调用程序为:test.txt>
编辑:拼写
下面展示了如何创建一个控制台程序,该程序从由以下命令之一指定的文件名中读取数据:
- 重定向输入(
< infile.txt
) - 使用参数(
-f:<filename>
或-f:"<filename containing spaces>"
)指定文件名 - 如果文件名没有指定,提示用户输入文件名
使用/?
作为唯一参数运行程序。
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
你得到: