It looks like RAR works by doing a CDirectory::Exists() which seems a bit safer I think (otherwise you could pass zip://<url_encoded_thing_that_doesnt_exist>/ and it'll return true.

i.e. do the GetZipEntry, and if that returns false, check if it's a directory ?