Получить уникальное имя файла в многопоточном приложении - PullRequest
0 голосов
/ 02 июля 2010

Мне нужно создать уникальное имя файла в многопоточном приложении, которое сериализует некоторые данные на диске. Какой подход я мог бы использовать, чтобы обеспечить уникальное имя. Приложение ранее не было многопоточным и использовало тики. При использовании нескольких потоков произошел сбой гораздо быстрее, чем я ожидал. Я теперь добавил CurrentThreadId к имени файла, и это должно сделать это

string.Format("file_{0}_{1}.xml", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId)

Есть ли какой-нибудь "умный" способ сделать это?

Ответы [ 4 ]

9 голосов
/ 02 июля 2010

А как насчет Guid.NewGuid () вместо идентификатора потока?

string.Format("file_{0}_{1:N}.xml", DateTime.Now.Ticks, Guid.NewGuid()) 

Сохраняя отметки как часть имени, имена будут по-прежнему в приблизительном порядке дат, если порядок важен.

{1: N } избавляется от фигурных скобок и черточек в направляющей.

Кроме того, рассмотрите возможность использования DateTime.UtcNow.Ticks, чтобы гарантировать увеличение тиков при переходе на летнее время.

1 голос
/ 02 июля 2010

В зависимости от ваших потребностей вы можете попробовать:

System.IO.Path.GetTempFileName();

Это создает временный файл с уникальным именем в каталоге% temp%. Я полагаю, вы можете скопировать файл в целевое местоположение до или после записи в него.

0 голосов
/ 02 июля 2010

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

Другой вариант - включить значение Guid в ваше имя файла.

0 голосов
/ 02 июля 2010

Как насчет

Guid.NewGuid().ToString()
...