c# - example - system io file delete
Cerrar un archivo después de File.Create (5)
Esta pregunta ya tiene una respuesta aquí:
Reviso para ver si existe un archivo con
if(!File.Exists(myPath))
{
File.Create(myPath);
}
Sin embargo, cuando voy a crear un StreamReader
con este archivo recién creado, aparece un error que dice:
El proceso no puede acceder al archivo ''[mi ruta de archivo aquí]'' porque está siendo utilizado por otro proceso.
No hay un File.Close(myPath)
que pueda llamar para que se cierre después de haber sido creado, entonces, ¿cómo puedo liberar este recurso para poder abrirlo más tarde en mi programa?
La función devuelve un objeto FileStream
. De modo que podría usar su valor de retorno para abrir su StreamWriter
o cerrarlo usando el método apropiado del objeto:
File.Create(myPath).Close();
La razón es porque FileStream se devuelve desde su método para crear un archivo. Debería devolver FileStream a una variable o llamar directamente al método de cierre después de File.Create.
Es una buena práctica dejar que el bloque que lo usa lo ayude a implementar el patrón IDispose para una tarea como esta. Quizás lo que podría funcionar mejor sería:
if(!File.Exists(myPath)){
using(FileStream fs = File.Create(myPath))
using(StreamWriter writer = new StreamWriter(fs)){
// do your work here
}
}
File.Create(string)
devuelve una instancia de la clase FileStream
. Puede llamar al método Stream.Close()
en este objeto para cerrarlo y liberar recursos que está utilizando:
var myFile = File.Create(myPath);
myFile.Close();
Sin embargo, dado que FileStream
implementa IDisposable
, puede aprovechar la declaración using
(generalmente la forma preferida de manejar una situación como esta). Esto asegurará que la transmisión se cierre y elimine adecuadamente cuando haya terminado con ella:
using (var myFile = File.Create(myPath))
{
// interact with myFile here, it will be disposed automatically
}
File.Create
devuelve un objeto FileStream
que puede llamar Close()
.
File.WriteAllText(file,content)
crear escribir cerrar
File.WriteAllBytes-- type binary
:)