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
+++
下面显示了如何创建一个控制台程序,该程序从指定的文件名中读取数据:
- 重定向输入 (
< 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());
}
所以,我编写了一个程序,它从文件中获取数据并对其进行处理并给出答案。我收到一个有点令人困惑的错误。如果我在命令提示符下调用程序如下: 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 +++
下面显示了如何创建一个控制台程序,该程序从指定的文件名中读取数据:
- 重定向输入 (
< 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());
}