我有一个通过运行以下代码行动态创建的文本文件。
if (system('javac main.java 2>ErrorFile.txt')!==false)
{
exec('java main 1>OutputFile.txt<filename.txt');
}
我现在想将OutputFile.txt与sample.txt进行比较。我使用了以下功能,但它并没有帮助我。任何人都可以帮帮我!
function filecomparision($a, $b) {
if(filesize($a) !== filesize($b)){
return false; $ah = fopen($a, 'rb'); $bh = fopen($b, 'rb');
$result = true; while(!feof($ah)) {
if(fread($ah, 8192) != fread($bh, 8192)) {
$result = false;
break;
}
}
fclose($ah); fclose($bh);
return $result;
}
}
当我尝试上述功能时,即使内容相同,我的文件也有两种不同的大小。并且它将OutputFile.txt的内容显示为八进制内容。
答案 0 :(得分:0)
<?php
/**
* @param $a string
* @param $b string
* @return bool
*/
function filecomparision($a, $b) {
// assuming both of files are exists
return md5(file_get_contents($a)) === md5(file_get_contents($b));
}
建议:当内容看起来相同时,您可以使用不同的大小,因为您的java应用程序可以使用其他字符集或不同的EOL标记。
我不知道如何纠正它。您可以尝试替换EOL。
<?php
function filecomparision($a, $b) {
// assuming both of files are exists
$a = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($a));
$b = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($b));
return md5($a) === md5($b);
}
更新此特定情况:
<?php
function filecomparision($a, $b) {
// assuming both of files are exists
$a = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($a)));
$b = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($b)));
return md5($a) === md5($b);
}
答案 1 :(得分:0)
我尝试覆盖文件,删除多余的字符。
$v = rtrim(file_get_contents($b),"\x0D\x0A");
$MyFile = fopen($b, "w") or die("Unable to open file!");
fwrite($MyFile,$v);
fclose($MyFile);
我添加了这段代码,现在一切正常。