Ну, я пишу драйверы файловой системы в течение 20 лет и скажу, что Рекс прав. Генерирование guid происходит намного быстрее, поскольку требует гораздо меньших затрат, чем поиск уникального имени файла. GetTempFileName фактически создает файл, что означает, что он должен вызывать через весь стек драйверов файловой системы (кто знает, сколько будет вызовов, и переключиться в режим ядра). GetRandomFileName звучит так, как будто это быстрее, однако я бы доверял вызову GUID быть еще быстрее Люди не понимают, что даже проверка на наличие файла требует полного вызова через стек драйверов. Фактически это приводит к открытию, получению атрибутов и закрытию (что составляет не менее 3 вызовов в зависимости от уровня). На самом деле это минимум 20 вызовов функций и переход в режим ядра. Гарантия уникальности GUIDS достаточно для большинства целей.
Моя рекомендация - генерировать имя и создавать файл, только если он не существует. Если это так, сгенерируйте исключение и поймайте его, затем сгенерируйте новый guid и попробуйте снова. Таким образом, у вас нулевой шанс ошибок и вы можете спокойно спать по ночам.
Кстати, проверка на ошибки слишком преувеличена. Код должен быть спроектирован так, чтобы он падал, если допущения ошибочны, или перехватывал исключения и обрабатывал их тогда. Гораздо быстрее выдвигать, извлекать и обращаться к стеку исключений, чем каждый раз проверять каждую функцию на наличие ошибки.