实现重定向输入

原来不太理解输入重定向的意思,问了度娘之后了解了输入重定向是指不使用系统提供的标准输入端口,而进行重新的指定。即:"输入重定向运算符(<)"可以处理从除键盘外的设备到Windows Vista命令的输入。输入重定向总是用于发送文本文件内容到Windows Vista命令。查找了c#如何实现输入重定向,发现了博客园里的这么一篇文章对这次任务的实现有帮助: http://www.cnblogs.com/tdskee/p/5852723.html

其中讲到当 Process 将文本写入其标准流中时,通常将在控制台上显示该文本。通过重定向 StandardOutput 流,可以操作或取消进程的输出。里面的语句是:process.StartInfo.RedirectStandardInput = true;  // 重定向输入流 。考虑到原来的代码在实现功能二方面是没有问题的,重定向应该是在前面加一下规定重定向输入的代码,即:if(是重定向输入)      {执行原来的代码;}

所以我打算在原有代码上进行修改。查询了ProcessStartInfo 类 https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.startinfo.aspx

我的代码修改结果如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.ComponentModel;

namespace wf
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Equals("-s"))
            {
                if (Program.StartInfo.RedirectStandardInput == true)
                {
                    StreamReader ioInput = null;
                    ioInput = new StreamReader(Console.OpenStandardInput());
                    string textFileName;
                    Console.Write(">type ");
                    textFileName = Console.ReadLine();
                    StreamReader sreader = new StreamReader(@"C:\Users\dell-pc\desktop\test2.txt");
                    string afile = sreader.ReadToEnd();
                    afile = afile.ToLower();//转换为小写字母
                    //将空格跟标点符号定义出来
                    char[] c = { ‘ ‘, ‘,‘, ‘.‘, ‘?‘, ‘!‘, ‘:‘, ‘;‘, ‘\‘‘, ‘\"‘ };
                    //分隔char[c]后产生的数组
                    string[] S = afile.Split(c);
                    //建立哈希表
                    Hashtable ha = new Hashtable();
                    for (int i = 0; i < S.Length; i++)
                    {
                        if (ha.ContainsKey(S[i]))
                        {
                            ha[S[i]] = (int)ha[S[i]] + 1;
                        }
                        else
                        {
                            ha.Add(S[i], 1);
                        }
                    }
                    string[] arrKey = new string[ha.Count];//存键
                    int[] arrValue = new int[ha.Count];//存值
                    ha.Keys.CopyTo(arrKey, 0);
                    ha.Values.CopyTo(arrValue, 0);
                    Console.WriteLine();
                    Console.WriteLine(">wf -s test.txt");
                    Console.WriteLine("total " + ha.Count);
                    Console.WriteLine();
                    Array.Sort(arrValue, arrKey);//排序
                    int n = 0;
                    for (int i = arrKey.Length - 1; i >= 0; i--)
                    {
                        if ((string)arrKey[i] != "")
                        {
                            if (n < 10)
                            {
                                //输出前10位多的单词,右对齐
                                Console.Write(arrKey[i].ToString().PadRight(12));
                                Console.WriteLine(arrValue[i].ToString());
                                n = n + 1;
                            }
                        }
                    }
                }
            }
        }
    }
}

编译一下,却报错了报错如上图:

我很绝望。。。再去查一下资料。。。

时间: 2024-10-22 12:19:39

实现重定向输入的相关文章

重定向输入输出流--freopen

freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流.该函数可以在不改变代码原貌的情况下改变输入输出环境. C99函数声明: FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream); 形参说明: filename:需要重定向到的文件名或文件路径. mode:代表文件访问权限的字符串.例如,"r"表示

shell 重定向输入

#!/bin/bash NC_START="nc 192.168.76.227 9999" LOOP=100000 for((i=0;i<$LOOP;i++)) do $NC_START <<EOF $i EOF done 以上例子是一个调用 nc 命令向一个监听端口发送数据的例子. 这里 NC_START 只是一个例子, 在 <<EOF 之前可以是任意一个命令 EOF 是一个变量名,可以自定义,但必须成对出现. 在 XXX <<EOF  和

freopen重定向输入

#include <bits\stdc++.h> using namespace std; int main() { freopen("C:\\Users\\dcf\\Desktop\\txt.txt","r",stdin); int n,mx=0; while(cin>>n) { if(n>mx) mx=n; } cout<<mx<<endl; return 0; } freopen 可代替大量的数据输入

Linux文件编辑器vim输出输入重定向、管道以及进程

合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下.正因基础的重要性,才又撸起了linux. linux编辑工具: VI VIM EMACS vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim的这些优势主要体现在以下几个方面: 易用性 vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台. 语法加亮 vim可以用不同的颜色来加亮你的代码. 可视化操作(ESC+V) 就是说vim不仅可以在终端运行,也可以运行于x

shell介绍,命令历史记录,命令和文件名自动补齐;通配符和输入\输出重定向

shell介绍 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.在计算机硬件之间还有一层东西--系统内核.如果把计算机硬件比作一个人的躯体,那系统内核就是人的大脑.至于shell,把它比作人的五官似乎更贴切些.言归正传,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传给系统内核,接着内核再去支配计算机硬件去执行各种操作.Bash (GNU Bourne-Again Shell) 是许多Linux

Linuc学习3-输入和输出重定向

已打开的文件描述符在fork和exec调用后保留下来,我们可以利用对进程这方面知识点的理解来改变程序的行为. 这个例子涉及一个过滤程序:它从标准输入读取数据,然后向标准输出写数据,同时在输入和输出之间对数据做些有用的转换. 过滤程序upper.c #include<stdio.h> #include<stdlib.h> #include<ctype.h> int main() { int ch; while( EOF != (ch=getchar())) { putch

Linux重定向相关(转载帖,供自己cookbook)

Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作.  Linux默认输入是键盘,输出是显示器.你可以用重定向来改变这些设置.比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了.输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果.重定向操作符可

CentOS下输入输出重定向

nux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linux默认输入是键盘,输出是显示器.你可以用重定向来改变这些设置.比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了.输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果.重定向操作符可以用来

标准输出重定向覆盖与追加

标准输出重定向覆盖与追加 命令 > 文件 命令 >> 文件 错误文件 2>文件 错误文件 2>>文件正确和错误同时输出 命令>文件 2>&1 命令>>文件 2>&1 同时输入到一个文件里面 命令&>文件 命令 &>>文件 命令>>文件1 2>>文件2 正确的输入1文件,错误的输入2文件 ls &> /dev/null    执行命令丢入黑洞 <