System.IO.File.Create que bloquea un archivo

Estoy usando System.IO.File.Create para crear un archivo. No estoy escribiendo con un escritor de secuencias, simplemente creándolo.

Aparece un error del servidor en la interfaz cuando la aplicación intenta abrir el archivo recién creado, es decir, que el archivo está en uso. La recolección de basura parece venir y unos minutos más tarde todo está bien.

Ahora sé que si estuviera usando Streamwriter, tendría que cerrarlo. ¿Se aplica lo mismo a la creación?

He leído que abrir un guionista en el archivo y cerrarlo inmediatamente lo arreglará, pero parece desordenado. ¿Hay alguna forma más simple?

File.Create devuelve un FileStream . Deberías usarlo así:

 using (FileStream fs = File.Create(path)) { //you can use the filstream here to put stuff in the file if you want to } 

Prueba esto:

 System.IO.File.Create(FullFName).Close(); 

Al crear el archivo, se abre un FileStream y, por lo tanto, se bloquea ( File.Create devuelve FileStream ).

Debe cerrar esta secuencia para acceder al archivo. Esto se hace mejor con una statement de using :

 using(FileStream fs = File.Create(path)) { } 

Al usar File.Create obtienes un FileStream devuelto. Hasta que cierre la secuencia o hasta que el objeto FileStream sea ​​eliminado (por el finalizador del recolector de basura) permanecerá abierto y bloqueado.

FileStream implementa IDisposable para que pueda hacer lo siguiente:

 using(FileStream fs = File.Create(filename)) { // Do stuff like write to the file } 

La sentencia using es “azúcar sintáctica” y hace que el comstackdor genere código que es funcionalmente equivalente a:

 FileStream fs = File.Create(filename) try { // Do stuff like write to the file } finally { fs.Dispose(); } 

El método Dispose llama a Close internamente.

El método Create devolverá un identificador de archivo. El identificador de archivo debe cerrarse antes de volver a usar el archivo. Consulte los detalles en el artículo de MSDN File.Create Method (String) .

Resumen:

El objeto FileStream creado con este método tiene un valor de FileShare predeterminado de Ninguno; ningún otro proceso o código puede acceder al archivo creado hasta que se cierre el identificador original del archivo.

Estaba usando: System.IO.File.Create(sFullFileName);

El método .Create anterior no estaba cerrando el archivo

Ahora uso: System.IO.File.WriteAllText(sFullFileName, "Uploading");

Este método crea y cierra el archivo (nota: puse una cadena “Cargando” en el archivo, pero estoy seguro de que string.Empty también funcionará.