I have been doing some backups and I wrote a utility that determines if files are an exact match. As a shortcut, I check the file size. So far so good on this with millions of files until I found something odd: getSize() and DirEntry's .size are producing different values.
This is the relevant code:
if (sourceFile.size != getSize(destinationFilename)) {
if (getSize(sourceFile.name) != getSize(destinationFilename))
writeln("Also did not match");
else
writeln("Did match so this is odd");
return ArchivalStatus.SizeDidNotMatch;
}
Whereas before it just returned SizeDidNotMatch, now it also prints "Did match so this is odd".
It seems really odd that getSize(sourceFile.name) is returning a different number than sourceFile.size. This is an external HDD on windows formatted in ntfs that it is reading. I believe I originally wrote the files to the file system in Windows, but then today I cut and paste them (in the same drive) in Linux. However, this is the first time this has happened after millions of comparisons and it only happened for about 6 files. It does happen consistently though.
I have verified that the file size is that reported by getSize and not sourceFile.size and that the files open correctly.
This is my compiler version:
DMD32 D Compiler v2.104.2-dirty
If this is actually a problem and I'm not missing something, I would not mind trying to fix this whenever I have some time.