// Checks if two files have equal content using memory mapped
files
import std.file;
import std.mmfile;
import std.stdio;
// Compares the content of two files
private bool equals(in string f1, in string f2)
{
if (getSize(f1) != getSize(f2))
return false; // different file sizes
if (getSize(f1) == 0)
return true; // zero-length files are equal
MmFile m1, m2;
try
{
m1 = new MmFile(f1);
m2 = new MmFile(f2);
return m1[] == m2[];
}
catch (Throwable ex)
{
writefln("File read error: %s", ex.msg);
return false; // cannot compare the files
}
finally
{
delete m1;
delete m2;
}
}
void main (string[] args)
{
enum NotFound = "Cannot open file: %s";
if (args.length == 3)
{
auto f1 = args[1], f2 = args[2];
if (!(exists(f1) && isFile(f1)))
writefln(NotFound, f1);
else if (!(exists(f2) && isFile(f2)))
writefln(NotFound, f2);
else if (equals(f1, f2))
writeln("Same files");
else
writeln("Different files");
}
else
{
writeln("Usage: filequals <file1> <file2>");
}
}