public static function make(string $path, int $ifExists = File::MAKE_FILE_EXISTS_THROW_EXCEPTION) : File
    {
        $exists = File::exists($path);

        if($exists) {
            if($ifExists === File::MAKE_FILE_EXISTS_OVERWRITE) {
                unlink($path);
            } else if($ifExists === File::MAKE_FILE_EXISTS_OPEN) {
                return new File($path);
            } else {
                throw new FileAlreadyExists($path);
            }
        }

        if(!fopen($path, "c")) {
            throw new CouldntCreateFile($path);
        }

        return new File($path);
    }