Cerrar un archivo después de File.Create

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 progtwig?

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 statement 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 } 

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(); 

File.Create devuelve un objeto FileStream que puede llamar 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.WriteAllText(file,content) 

crear escribir cerrar

 File.WriteAllBytes-- type binary 

🙂