protected void processFile(GFile srcFile, File destFSFile, TaskMonitor monitor)
			throws IOException, CancelledException {
		try {
			if (!FileUtilities.isPathContainedWithin(this.rootOutputDirectory, destFSFile)) {
				throw new IOException("Extracted file " + srcFile.getPath() + " [" + destFSFile +
					"] would be outside of root destination directory: " +
					this.rootOutputDirectory);
			}
			extractFile(srcFile, destFSFile.getCanonicalFile(), monitor);
		}
		catch (CancelledException | IOCancelledException e) {
			throw e;
		}
		catch (Exception e) {
			if (!handleUnexpectedException(srcFile, e)) {
				throw e;
			}
		}
	}
Extract the contents of a directory in a {@link GFileSystem} into a local file system
directory.
<p>
The destination directory is created if not present.

@param srcGFileDirectory if null, directory is filesystem root
@param destDirectory destination / output directory
@param monitor {@link TaskMonitor} to watch and update with progress
@throws IOException if IO problem.
@throws CancelledException
Ghidra/Features/Base/src/main/java/ghidra/formats/gfilesystem/AbstractFileExtractorTask.java