Может ли Path.GetTempFileName() когда-либо кэшироваться?

У меня странная проблема... и я думаю, что сузил ее до такой степени, что мы создаем временный файл, используя Page.GetTempFileName(),

Иногда я получаю сообщение об ошибке, в котором говорится, что Cannot create a file when that file already exists.

Есть ли шанс, что с помощью Path.GetTempFilename() может сгенерировать то же имя файла и стать кэшированным?

Я изменяю свой код для использования:

Path.Combine(System.IO.Path.GetTempPath(), string.Concat(Guid.NewGuid().ToString(), ".xls"));

В надежде, что это сгенерирует уникальное имя файла, но я обеспокоен тем, что может возникнуть та же проблема.

1 ответ

Решение

Path.GetTempFilename() создает фактический файл на диске; в зависимости от того, что вы делаете, когда у вас есть это имя файла, вы можете что-то вызывать. Он написан так, чтобы возвращать реальный файл, чтобы избежать условий гонки, связанных с более старыми временными методами имен файлов из прошлого (особенно tmpnam в стандартной библиотеке C, например).

Обратите внимание, что он будет выдавать исключения, если с помощью этого метода создано более 65 535 файлов без их удаления или если он не может создать уникальное имя файла.

Итак, что вы делаете с этим именем файла после его возврата из Path.GetTempFilename()?

Другие вопросы по тегам