这一次上机实验的内容是关于CRC循环冗余校验的。虽然实验内容是用英语写的,逐句阅读并不难理解。
实验内容简单来说是先要编写一个控制台应用程序,读取一个文件的内容,根据CRC循环冗余校验的规则进行运算,最后将运算的结果输出到控制台。
然后编写一个窗体应用程序对这个控制台程序进行调用,读取用户在窗体中输入的文件路径,最后将校验后的内容输出到窗体当中显示。
对于我,这次实验的难点主要并不在控制台程序中的校验过程的试验,而是C#中流的输入输出以及不同程序之间的连接通信。C#中的流的输入输出与我之前学习的C++的流输入输出有很大的不同,个人感觉相比C++要略微复杂一些。
这是控制台程序中的输入输出的一些代码
1 try 2 { 3 FileStream fStream = new FileStream(args[0], FileMode.Open, FileAccess.Read); 4 5 BinaryReader binReader = new BinaryReader(fStream); 6 byte message; 7 while (true) 8 { 9 message = binReader.ReadByte(); 10 CalcCRC.CalculateCRC(message); 11 } 12 } 13 catch (EndOfStreamException e) 14 { 15 16 }
这是窗体应用程序中调用控制台应用程序的代码
1 private void buttonOK_Click(object sender, EventArgs e) 2 { 3 Process process = new Process(); 4 process.StartInfo.FileName = @"f:\C#\C#选修\Project1\Project1\bin\Release\Project1.exe"; 5 process.StartInfo.RedirectStandardInput = true; 6 process.StartInfo.RedirectStandardOutput = true; 7 process.StartInfo.CreateNoWindow = true; 8 process.StartInfo.UseShellExecute = false; 9 process.StartInfo.Arguments = filePathTextbox.Text; 10 process.Start(); 11 12 string outPut = process.StandardOutput.ReadLine(); 13 14 outputTextbox.Text = outPut; 15 16 }
刚开始编写的时候,我采取的并不是将文件路径直接传入控制台程序的方法,而是将文件在窗体应用程序中读取并分段传入控制台程序中运算。控制台程序读取传入内容有两种方法,一种是作为参数传入,在程序中保存在Main函数的args参数中;另一种是采用流读入的方法传入。若在控制台中输入"*.exe arg1 arg2"的方式运行程序,以上两种方法都能够传入参数没有问题。然而,若是用另一个程序通过process的方法运行,这两种方法必须严格区分。开始我编写控制台程序用args传入参数,然后在用process的方法调用的时候发现无论如何都无法传入参数,便是没有将这两种方式区分开来。
最后贴上窗体程序的运行结果