public void compareDirectory(
      final File sourceDirectory, final File referenceDir, final File failedDirectory)
      throws IOException {
    checkDirectories(sourceDirectory, referenceDir, failedDirectory);
    log("Starting comparison using width " + width);
    IOUtil.deleteAllFiles(failedDirectory);

    final boolean wasEnabled = enableLogging(false);
    try {
      final Iterator<File> fileIt = listSourceFiles(sourceDirectory);
      final CompareStatistics stats = new CompareStatistics();
      while (fileIt.hasNext()) {
        final File file = (File) fileIt.next();
        try {
          compareFile(file, referenceDir, failedDirectory, stats);
        } catch (final IOException e) {
          stats.failedIOException(e);
        }
      }
      stats.report();
    } finally {
      enableLogging(wasEnabled);
    }
  }