protected function describeTargetFile($extension) {
		if ($this->targetDirectory === null) {
			throw new TargetDirectoryNotSpecifiedError();
		}

		$targetFilename = isset($this->targetFilename) ? $this->targetFilename : self::createRandomString();

		if (!File::mayNameBeValid($targetFilename)) {
			throw new InvalidFilenameException();
		}

		if (!$this->targetDirectory->exists() && !$this->targetDirectory->createRecursively(0755)) {
			throw new TargetFileWriteError();
		}

		return new File($this->targetDirectory, $targetFilename, $extension);
	}