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

У меня странная проблема ... и я думаю, что сузил ее до такой степени, что мы создаем временный файл, используя 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 Ответ

2 голосов
/ 13 июля 2011

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

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

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

...