Was ist der beste Weg, um den Namen eines Ordners zu erhalten, die gar nicht existiert?

StackOverflow https://stackoverflow.com/questions/147925

  •  02-07-2019
  •  | 
  •  

Frage

Was ist der beste Weg, um eine Zeichenfolge, die einen Ordnernamen zu bekommen, dass ich sicher sein kann, hat nicht gibt es? Das heißt, wenn ich DirectoryInfo.Exists für den angegebenen Pfad nennen, sollte es false zurück.

EDIT: Der Grund dahinter ist, ich einen Test für eine Fehlerprüfung schreibe, die Fehler-Checker prüft, ob der Pfad vorhanden ist, so überlegte ich laut auf dem besten Weg, einen Weg zu bekommen, der nicht existiert

War es hilfreich?

Lösung

Nennen Sie es nach einer GUID -. nur die ungültigen Zeichen nehmen

Andere Tipps

Es ist nicht wirklich eine Möglichkeit, genau das zu tun, was Sie so, wie Sie wollen. Wenn man darüber nachdenkt, sieht man, dass auch nach dem Aufruf von DirectoryInfo.Exists hat false zurückgegeben, könnte ein anderes Programm voraus gegangen ist und das Verzeichnis erstellt - das ist eine Race-Bedingung ist

.

Die normale Methode, dies zu handhaben ist ein neues temporäres Verzeichnis erstellen - wenn die Schöpfung erfolgreich ist, dann wissen Sie es nicht existierte, bevor Sie es erstellt

.

Nun, ohne das Verzeichnis zu erstellen, alle können Sie sicher sein, dass es nicht vor ein paar Mikrosekunden noch nicht gab. Hier ist ein Ansatz, der nahe genug sein könnte:

        string path = Path.GetTempFileName();
        File.Delete(path);
        Directory.CreateDirectory(path);

Beachten Sie, dass diese erstellt das Verzeichnis gegen Faden Rennen zu blockieren (das heißt ein anderer Prozess / Thread das Verzeichnis unter Ihnen zu stehlen).

Was ich am Ende mit:

using System.IO;

string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

(Auch scheint es nicht, wie Sie brauchen Zeichen Streifen aus einer guid - sie erzeugen Rechtsdateinamen)

Nun, eine gute Wette wird Strings wie der Benutzername verketten, die heutigen Datum und die Zeit bis auf die Millisekunde.

Ich bin zwar neugierig: Warum würden Sie dies tun wollen? Was sollte es sein?

Ist dies einen temporären Ordner oder etwas zu schaffen? Ich verwende oft Guid.NewGuid einen String erhalten für die Ordnernamen zu verwenden, die Sie sicher sein wollen, noch nicht vorhanden ist.

Ich glaube, Sie in der Nähe können genug:

string = Verzeichnisname Guid.NewGuid.ToSrtring ();

Da GUIDs ziemlich zufällig sind, sollten Sie nicht mehr als 2 dirs bekommen das gleiche.

ein frisch erzeugte GUID in einem Namespace verwenden, die auch in gewisser Weise einzigartig ist (zum Beispiel der Name Ihrer Anwendung / Produkt) sollten Sie bekommen, was Sie wollen. Zum Beispiel kann der folgende Code ist extrem unwahrscheinlich scheitern:

string ParentPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "MyAppName");
string UniquePath = System.IO.Path.Combine(ParentPath, Guid.NewGuid().ToString());
System.IO.Directory.CreateDirectory(UniquePath);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top