当前位置: 首页 > 编程语言 > C#

重定向输出到文本文件c#分享

时间:2023-04-11 02:26:19 C#

重定向输出到文本文件c#这是我的代码:pr2.StartInfo.FileName="show-snps";pr2.StartInfo.Arguments=@"-Clr-x2out.delta>out.snps";pr2.开始();pr2.WaitForExit();show-snps写入错误。当我删除“>out.snps”部分时,一切正常,它会将结果写入终端,但我需要将其重定向到文本文件。我怎样才能做到这一点?当你启动这样一个程序时,你不能那样重定向。它需要像CMD.EXE这样的shell来执行此操作。相反,您需要将ProcessStartInfo.RedirectStandardOutput设置为您自己管理的流。这是一个例子。此示例说明如何通过StreamReader获取控制台进程创建的数据。根据您的要求,您将从该StreamReader读取并写入FileStream输出。如果它有什么帮助,这是我多年前写的一个实用工具类(for.Net2),这可能是有益的:usingSystem;使用System.IO;使用系统线程;使用系统诊断;使用系统集合;使用System.Collections.Specialized;namespaceProcessUtilities{//////封装一个可执行程序。///这个类可以很容易地运行一个控制台应用程序,并使该应用程序的输出显示///在父控制台的窗口中,以及重定向文件的输入和输出。/////////要使用此类:///(1)创建一个实例。///(2)如果在构造函数中未指定文件名,则设置ProgramFileName属性。///(3)根据需要设置其他属性。///(4)调用Run()。///publicclassExecutable{#regionConstructor///运行指定的程序文件名。///要运行的程序文件的名称。publicExecutable(stringprogramFileName){ProgramFileName=programFileName;_processStartInfo.ErrorDialog=false;_processStartInfo.CreateNoWindow=false;_processStartInfo。UseShellExecute=false;_processStartInfo.RedirectStandardOutput=false;_processStartInfo.RedirectStandardError=false;_processStartInfo.RedirectStandardInput=false;_processStartInfo.WindowStyle=ProcessWindowStyle.Hidden;_processStartInfo.Arguments="";}///构造函数。publicExecutable():this(string.Empty){}#endregion//构造函数#region公共属性///可执行文件的文件名(完整路径名)。公共字符串ProgramFileName{get{return_processStartInfo.FileName;}设置{_processStartInfo.FileName=值;}}///运行时传递给可执行文件的命令行参数。publicstringArguments{get{return_processStartInfo.Arguments;}设置{_processStartInfo.Arguments=值;}}///运行时为可执行文件设置的工作目录。publicstringWorkingDirectory{get{return_processStartInfo.WorkingDirectory;}设置{_processStartInfo.WorkingDirectory=值;}}//////要成为你的文件sed如果标准输入被重定向,///或null或string.Empty不重定向标准输入。///publicstringStandardInputFileName{set{_standardInputFileName=value;_processStartInfo.RedirectStandardInput=!string.IsNullOrEmpty(值);}get{return_standardInputFileName;}}//////标准输出被重定向时使用的文件,///或null或string.Empty不重定向标准输出。///publicstringStandardOutputFileName{set{_standardOutputFileName=value;_processStartInfo.RedirectStandardOutput=!string.IsNullOrEmpty(值);}get{return_standardOutputFileName;}}//////重定向标准错误时使用的文件,///或null或string.Empty不重定向标准错误。///publicstringStandardErrorFileName{set{_standardErrorFileName=value;_processStartInfo.RedirectStandardError=!string.IsNullOrEmpty(值);}得到{返回_standardErrorFileName;}}#endregion//公共道具erties#regionPublicMethods///将一组名称-值对添加到可执行文件可用的环境变量集中。///要添加的名称-值对。publicvoidAddEnvironmentVariables(StringDictionaryvariables){if(variables==null)thrownewArgumentNullException("variables");StringDictionaryenvironmentVariables=_processStartInfo.EnvironmentVariables;foreach(DictionaryEntryeinvariables)environmentVariables[(string)e.Key]=(string)e.Value;}///运行可执行文件并等待它终止。///从可执行文件返回的退出代码。publicintRun(){线程standardInputThread=null;线程standardOutputThread=null;线程standardErrorThread=null;_standardInput=null;_standardError=null;_standardOutput=空;int退出代码=-1;尝试{使用(Processprocess=newProcess()){process.StartInfo=_processStartInfo;过程。开始();如果(process.StartInfo.RedirectStandardInput){_standard输入=process.StandardInput;standardInputThread=startThread(newThreadStart(supplyStandardInput),"StandardInput");}如果(process.StartInfo.RedirectStandardError){_standardError=process.StandardError;standardErrorThread=startThread(newThreadStart(writeStandardError),"StandardError");}如果(process.StartInfo.RedirectStandardOutput){_standardOutput=process.StandardOutput;standardOutputThread=startThread(newThreadStart(writeStandardOutput),"StandardOutput");}process.WaitForExit();exitCode=process.ExitCode;}}finally//确保线程不会持续超出正在运行的进程{if(standardInputThread!=null)standardInputThread.Join();如果(standardOutputThread!=null)standardOutputThread.Join();如果(standardErrorThread!=null)standardErrorThread.Join();}返回退出代码;}#endregion//公共方法#region私有方法///启动一个线程。///此线程的启动信息///威胁的名称d///线程对象privatestaticThreadstartThread(ThreadStartstartInfo,stringname){Threadt=newThread(startInfo);t.IsBackground=true;t.Name=姓名;t.开始();返回吨;}///将适当文件的标准输入提供给正在运行的可执行文件的线程。privatevoidsupplyStandardInput(){//使用(StreamReaderreader=File.OpenText(_standardInputFileName))将文件中的文本一次一行地送入标准输入流对于(;;){stringtextLine=reader.ReadLine();如果(textLine==null)中断;writer.WriteLine(textLine);}}}///将运行的可执行文件的标准输出输出到适当文件的线程。privatevoidwriteStandardOutput(){使用(StreamWriterwriter=File.CreateText(_standardOutputFileName))使用(StreamReaderreader=_standardOutput){writer.AutoFlush=true;对于(;;){stringtextLine=reader.Read线();如果(textLine==null)中断;writer.WriteLine(textLine);}}if(File.Exists(_standardOutputFileName)){FileInfo信息=newFileInfo(_standardOutputFileName);//如果错误信息为空或只包含eof等。))使用(StreamReaderreader=_standardError){writer.AutoFlush=true;for(;;){stringtextLine=reader.ReadLine();if(textLine==null)break;writer.WriteLine(textLine);}}if(File.Exists(_standardErrorFileName)){FileInfoinfo=newFileInfo(_standardErrorFileName);//如果错误信息为空或者只包含eof等if(info.Length它不能起作用,因为cmd.exeshell支持>重定向请尝试使用以下代码。以上就是C#学习教程:重定向输出到文本文件c#分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注---Processpr2=新流程();pr2.StartInfo.FileName=@"c:windowssystem32cmd.exe";pr2.StartInfo.Arguments=@"/k"show-snps-Clr-x2out.delta>out.snps"";pr2.开始();pr2.WaitForExit();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: