2010-07-02 10 views
0

Je dois créer un nom de fichier unique dans une application multithread qui sérialise certaines données sur le disque. Quelle approche pourrais-je utiliser pour assurer un nom unique. L'application n'était pas multithread auparavant et utilisait Ticks. Lors de l'utilisation de plusieurs threads, il a échoué beaucoup plus rapidement que prévu. Je maintenant ajouté le CurrentThreadId au nom du fichier, et qui devrait le faireObtenir un nom de fichier unique dans une application multithread

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

Y at-il plus « intelligents » façon de le faire?

Répondre

9

Qu'en est-il de Guid.NewGuid() au lieu de l'ID de thread? En conservant les graduations dans le nom, les noms seront toujours dans l'ordre de la date approximative si la commande est importante.

Le {1: N} se débarrasse des accolades et des tirets dans le guid. .

Aussi, pensez à utiliser DateTime.UtcNow.Ticks, de façon à garantir les tiques supplémentaires lors de l'enregistrement le jour des coups de pied de temps en

+0

Merci Je n'étais pas certain de l'unicité du Guid à travers le fil. Je pensais qu'ils étaient salés avec l'heure actuelle, ce qui n'aiderait pas les threads –

+0

Vous avez raison - l'horodatage est un composant majeur du Guid, mais l'algorithme maintient également son propre compteur unique pour gérer les requêtes "simultanées". Une simple décomposition de l'algorithme est ici: http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx –

1

En fonction de vos besoins, vous pouvez essayer:

System.IO.Path.GetTempFileName();

Cela crée un fichier temporaire nommé de manière unique dans le répertoire% temp%. Je suppose que vous pouvez copier le fichier à votre emplacement cible avant ou après avoir écrit dessus.

+0

Cela garantit seulement le nom de fichier est unique dans le répertoire temp - pas à la Emplacement cible de l'OP. –

0

Que diriez-vous

Guid.NewGuid().ToString() 
0

Pour réserver en fait le nom du fichier, vous devez créer le fichier immédiatement et vérifier les exceptions.

Une autre option consisterait à inclure une valeur Guid dans votre nom de fichier.

Questions connexes