您的位置:首页 > 其它

Windows下比较两个文件的不同(命令行操作/相关软件)

2013-05-21 10:12 405 查看

写在前面

做ACM题目的时候,往往要比较程序输出与样例输出,以确保程序正确性。当样测试样例比较少的时候,直接人工比对就可以了,但当测试数据比较大(上百或更多)的时候,人工检查就容易出错了。

假设现有两个测试文件1381.in和1381.ans,其中1381.in是程序输入文件,1381.ans程序输入对应的正确答案的输出。假设我们将自己编写的程序重定向输出到1381.out文件。那么我们就需要比对1381.ans和1381.out两个文件。只有当两个文件每一行均相等的时候,才说明程序通过了该测试用例。

文件重定向

方法一:在源码中重定向

重定向输入输出流有两种方法。一种是在源码中添加如下代码:

freopen("1381.in", "r", stdin);
freopen("1381.out", "w", stdout);

freopen是定义在C的stdio头文件中,因此需要添加头文件#include <stdio.h>。

而在C++中,则需要需要添加头文件#include <cstdio>才能使用freopen函数。

方法二:命令行方式

另一种方法是在命令行窗口(Dos)下运行程序,如下图所示:



注:

1,其中第一个为要执行的命令。 <表示重定向输入流,其右方的1381.in为输入文件。>表示重定向输出流,右方的1381.out表示输出的内容将要存放的文件名。

2,可在程序所在文件夹内空白处按住shift键,然后鼠标右击,点击“在此处打开命令行窗口”,再输入上图所示命令即可。

文件比对

方法一:写程序判断

生成好1381.out文件之后,接下来的工作就是进行文件比对了。其实文件的比对逻辑是很简单的,无非就是同时从两个文件中读取一行字符串,然后比较字符串是否相同。若不相同,则将其输出。所以自己动手写程序判断就是了。上图中的differ.py是一个Python脚本程序,要运行该脚本,需安装Python3.0以上版本的Python解释器。当然,也可以自己用C/C++编写程序校验。differ.py代码如下:

name = input("输入文件名\n")

with open(str(name) + ".ans", "r") as stan:
with open(str(name) + ".out", "r") as f:
for s, t in zip(stan, f):
s = s.rstrip()
t = t.rstrip()
if s != t:
print()
print("答案:", s)
print("程序:", t)
print()
print("down!")


命令行窗口运行效果如下:



程序显示1381.ans中值为81的行与1381.out中对应行的不相同。也就是说,答案是81,但是程序处理得到的错误结果为90。

方法二:文件比较命令fc

事实上,在Windows中内置了如上功能的文件比较命令fc,只需如下图所示使用即可:



需要特别注意的是,在某些机器上,执行上述命令的时候,会出现“fc 不是内部或外部命令.....”这样的提示,这是没有配置好“环境变量的”缘故。具体操作方法,可自行搜索。对于64位Win7系统,可参考:http://bbs.pcbeta.com/viewthread-869777-1-1.html。如果按链接所示配置之后依然出现提示,可尝试重启机器。

方法三:使用软件来比对文件

最后,我们可以使用软件来比对文件。这里推荐Beyond Compare,下载地址可自行搜索。如下是程序运行截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息