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.

Reply via email to