【NCRE需求】
要求获取指定文件夹中,后缀名为“.bmp”的所有文件。
这个题目要求的内容是在数据库题库表中的questionContext字段下的数据。内容为“获取HBTestA文件夹下所有以“.bmp”为后缀名的文件”。
要想用C#实现这个功能,我们就要将HBTestA和.docx这两个内容取出来。此需求也就转换为获取一句话中的指定内容。
【解决思路】
最初上网查了一些资料,可能关键字用的不正确吧,一直查不到自己想要的内容。就想要换一种思路来进行。正好JS学到了正则表达式这一块,于是就想用正则表达式来实现这一需求。
1、先获取“.bmp”中的内容,也就是获取双引号中的内容,我要查询什么类型的文件
匹配到的正则表达式:"(?<=“).*?(?=”)"
Regex re = newRegex("(?<=“).*?(?=”)", RegexOptions.None);
MatchCollection mc = re.Matches(题目要求);
2、我要在哪个目录下查找符合要求的文件,也就是要获取HBTestA。
我不仅要获取.bmp,我还要获取出HBTestA。而且,每套题的文件夹名称和后缀名类型都是这样的一个顺序,所以为了方便写代码,我将HBTestA也加上了引号。
于是:获取HBTestA为mc[0].ToString();.docx为mc[1].Tostring();
获取了HBTestA之后再拼接成完成的路径:directory=@"D:\计算机一级考生文件"+mc[0].Tostring();
3、开始查找
此块代码为赵寒开发出来的。
string str = @"D:\计算机一级考生文件\winkt\"+ mc[1].ToString ();
var files =Directory.GetFiles(str, "*" +mc[0].ToString () );
4、将所有符合要求的文件路径拼接成一个字符串更新为考生答案。
foreach(var file in files)
Text1.text += file;
5、拼接出来的正确答案为:
“D:\计算机一级考生文件\winkt\HBTestA\CASLRPT.BMPD:\计算机一级考生文件\winkt\HBTestA\MS.BMPD:\计算机一级考生文件\winkt\HBTestA\usWIZFLAX.BMPD:\计算机一级考生文件\winkt\HBTestA\WIZSTONE.BMP”
【遇到的问题】
如果我将“计算机一级考生文件”这个文件夹改为其他文件夹名字,那么我题库中的正确答案也要修改。
所以,我们应该只获取文件名而不是路径,这样,无论文件夹名称怎样改,我们的题库都不用改。
PS:此处代码还在修改中!
【总结】
现在发现,代码什么的都不是最重要,一个好的Idea很重要,然后是Take Action。在这个过程中收获最大的还是思维的转变。