¿Cuál es la mejor manera de obtener el nombre de una carpeta que no existe?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

¿Cuál es la mejor manera de obtener una cadena que contenga un nombre de carpeta que puedo estar seguro de que no existe? Es decir, si llamo a DirectoryInfo.Exists para la ruta dada, debería devolver false.

EDITAR: la razón detrás de esto es que estoy escribiendo una prueba para un verificador de errores, el verificador de errores comprueba si existe la ruta, así que me pregunté en voz alta sobre la mejor manera de obtener una ruta que no existe.

¿Fue útil?

Solución

Asigne un nombre después de un GUID: simplemente elimine los caracteres ilegales.

Otros consejos

Realmente no hay ninguna manera de hacer exactamente lo que tú quieres hacer. Si lo piensa bien, verá que incluso después de que la llamada a DirectoryInfo.Exists haya devuelto el valor falso, algún otro programa podría haber seguido adelante y creado el directorio. Esta es una condición de carrera.

El método normal para manejar esto es crear un nuevo directorio temporal: si la creación tiene éxito, entonces sabrá que no existía antes de crearla.

Bueno, sin crear el directorio, todo de lo que puede estar seguro es de que no existía hace unos pocos microsegundos. Aquí hay un enfoque que podría estar lo suficientemente cerca:

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

Tenga en cuenta que esto crea el directorio para bloquear contra carreras de subprocesos (es decir, otro proceso / subproceso robando el directorio debajo de usted).

Lo que terminé usando:

using System.IO;

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

(Además, no parece que necesites quitar los caracteres de un guid, ya que generan nombres de archivos legales)

Bueno, una buena apuesta será concatenar cadenas como el nombre de usuario, la fecha de hoy y el tiempo hasta el milisegundo.

Sin embargo, tengo curiosidad: ¿por qué quieres hacer esto? ¿Para qué debería ser?

¿Es esto para crear una carpeta temporal o algo así? A menudo uso Guid.NewGuid para obtener una cadena para usar para el nombre de la carpeta que desea asegurarse de que aún no existe.

Creo que puedes estar lo suficientemente cerca:

string directoryName = Guid.NewGuid.ToSrtring ();

Como los Guid son bastante aleatorios, no deberías obtener 2 directorios iguales.

El uso de un GUID recién generado dentro de un espacio de nombres que también es un tanto único (por ejemplo, el nombre de su aplicación / producto) debe proporcionarle lo que desea. Por ejemplo, el siguiente código es extremadamente improbable que falle:

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top