WordCount的基本功能及扩展功能(两人组队完成)
合作者:201631062118,201631062217
项目gitee链接:https://gitee.com/suiran90/wc/ (注:由于gitee操作不熟练,此次我们两人代码上传时出现问题,商议为由我上传,相关操作正在学习)
本次作业链接地址:https://edu.cnblogs.com/campus/xnsy/2018softwaretest2398/homework/2187
代码互审情况
在上一个项目中,我们各自完成了 wordcount 的基础功能,但由于各自单独编写,出现了许多小问题,在这里举出:
1.在比较两个字符是否相同时,使用 args[i].equals(“-o”) ,若参数 args[i] 缺失,会使程序出现Bug,应该使用 "-o".equals(args[i]) ;
2.命名问题,出现某些无意义变量,类似 int a 之类;
3.变量,函数命名字母大小写问题;
4.某些注释不清楚问题
代码互审情况 :
静态代码检查情况:
出现了下列代码检查情况
单元测试情况:
对测试代码实现语句覆盖
-a:
-s:
-e:
相关函数
当用户选择读取 代码行、空行、注释行
Encoding encode = Encoding.GetEncoding("GB2312");
FileStream fs = new FileStream(filename, FileMode.Open);
StreamReader sr = new StreamReader(fs, encode);
来对文件操作,其中使用 "GB2312" 可以对中文字符正常读取,filename 参数为文件路径。
代码说明
Rows.cs(读取行数)
//空行数
public int BlankLines(string filename)//传入文件位置字符串
{
//打开文件
Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
//fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, encode);
string line;
int NumberOfBlankLines = 0;//记录行数
//当当前行不为空,即当前行存在,即 +1
while ((line = sr.ReadLine()) != null)
{
while (line == "")
{
NumberOfBlankLines++;
break;//统计一次,退出,否则会死循环
}
}
// Console.WriteLine("Black line:" + NumberOfBlankLines);//显示行数
//关闭文件
sr.Close();
fs.Close();
return NumberOfBlankLines;//注意函数是有返回值的
}
//注释行
public int CommentLines(string filename)//传入文件位置字符串
{
//打开文件
Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
//fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, encode);
string line;
int NumberOfCommentLines = 0;//记录行数
//当当前行不为空,即当前行存在,即 +1
while ((line = sr.ReadLine()) != null)
{
char[] ArrayChar = line.ToCharArray();
if (ArrayChar.Length >= 2)
{
for (int i = 0; i < ArrayChar.Length - 1; i++)//防止越界
{
if ((ArrayChar[i] == '/' && ArrayChar[i + 1] == '/'))
{
NumberOfCommentLines++;
break;
}
}
}
}
// Console.WriteLine("Black line:" + NumberOfCommentLines);//显示行数
//关闭文件
sr.Close();
fs.Close();
return NumberOfCommentLines;//注意函数是有返回值的
}
//代码行
public int CodeLines(string filename)//传入文件位置字符串
{
//打开文件
Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
//fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, encode);
string line;
int NumberOfBlankLines = 0;//记录空白行数
NumberOfBlankLines = BlankLines(filename);
//当当前行不为空,即当前行存在,即 +1
int CountLine = 0;//记录总行数
int NumberOfCommentLines = 0;
NumberOfCommentLines = CommentLines(filename);
//当当前行不为空,即当前行存在,即 +1
while ((line = sr.ReadLine()) != null)
{
CountLine++;
}
Console.WriteLine("Code line:" + (CountLine - NumberOfBlankLines - NumberOfCommentLines)
+ "\nBlack Line:" + NumberOfBlankLines + "\nComment Line:" + NumberOfCommentLines + "\n");//显示行数
//关闭文件
sr.Close();
fs.Close();
return NumberOfBlankLines;//注意函数是有返回值的
}
当读取StopList.txt时
class StopList
{
//总行数
public string StopOfList()//传入文件位置字符串
{
string filename = System.IO.Directory.GetCurrentDirectory() + "\\StopList.txt";
//打开文件
Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
FileStream fs = new FileStream(filename, FileMode.Open);
StreamReader sr = new StreamReader(fs, encode);
string deactivateTable = "";
deactivateTable = sr.ReadToEnd();
Console.WriteLine("sop list:" + deactivateTable);
//应该关闭文件
sr.Close();
fs.Close();
return deactivateTable;
}
}
总结
1.处理读取当前目录文件,文件占用等问题,学习了前辈的文章;
2.对一个功能处理时,需要一步步思考;
3.代码编写许多相关工具是很有意思的,可以多多发掘其功能;
4.编写桩模块、驱动程序对开发很有利;
5.完成项目过程中,要有自己的计划,遵循计划,避免拖沓
参考文献链接
感谢以下文章作者的文献,让我受益良多
C#读取目录下所有指定类型文件的方法:https://blog.csdn.net/autumn20080101/article/details/52999456
c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件:https://blog.csdn.net/superhoy/article/details/7931234?utm_source=blogxgwz0