I like the automatic features of the recent Diskeeper versions. In a developer environment with lots of perforce syncing, clean and dirty builds and so on, it's been the only defragmenter that was install and forget. It makes sure to get out of the way when real IO is happening, and takes advantage of downtime to clean things up and optimize. Other tools might offer similar, but only after lots of configuration and tweaking.

I can't speak for how well it works with large files though. Usually the largest files in my environment are PDB files, usually around the 100-300MB range.