visual utilizado uso studio siendo saber puede proceso porque por otro ocupado obtener está esta create cerrar cerrado archivo acceso abierto c# file-io

c# - uso - Archivo utilizado por otro proceso después de usar File.Create()



saber si un archivo esta ocupado c# (9)

Actualicé tu pregunta con el fragmento de código. Después del sangrado correcto, inmediatamente queda claro cuál es el problema: utiliza File.Create() pero no cierra el FileStream que devuelve.

Hacerlo de esa manera es innecesario, StreamWriter ya permite StreamWriter a un archivo existente y crear un nuevo archivo si aún no existe. Me gusta esto:

string filePath = string.Format(@"{0}/M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); using (StreamWriter sw = new StreamWriter(filePath, true)) { //write my text }

Que usa este constructor StreamWriter .

Estoy intentando detectar si existe un archivo en tiempo de ejecución, si no, crearlo. Sin embargo, recibo este error cuando intento escribirle:

El proceso no puede acceder al archivo ''myfile.ext'' porque está siendo utilizado por otro proceso.

string filePath = string.Format(@"{0}/M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }

¿Alguna idea de cómo arreglarlo?


Al crear un archivo de texto, puede usar el siguiente código:

System.IO.File.WriteAllText("c:/test.txt", "all of your content here");

Usando el código de tu comentario. El archivo (flujo) que creó debe estar cerrado. File.Create devuelve el filestream al archivo recién creado .:

string filePath = "filepath here"; if (!System.IO.File.Exists(filePath)) { System.IO.FileStream f = System.IO.File.Create(filePath); f.Close(); } using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath)) { //write my text }


El método File.Create crea el archivo y abre un FileStream en el archivo. Entonces su archivo ya está abierto. Realmente no necesitas el archivo. Crear método en absoluto:

string filePath = @"c:/somefilename.txt"; using (StreamWriter sw = new StreamWriter(filePath, true)) { //write to the file }

El valor booleano del constructor StreamWriter hará que los contenidos se anexen si el archivo existe.


Esta pregunta ya ha sido respondida, pero aquí hay una solución del mundo real que verifica si el directorio existe y agrega un número hasta el final si el archivo de texto existe. Lo uso para crear archivos de registro diarios en un servicio de Windows que escribí. Espero que esto ayude a alguien.

// How to create a log file with a sortable date and add numbering to it if it already exists. public void CreateLogFile() { // filePath usually comes from the App.config file. I''ve written the value explicitly here for demo purposes. var filePath = "C://Logs"; // Append a backslash if one is not present at the end of the file path. if (!filePath.EndsWith("//")) { filePath += "//"; } // Create the path if it doesn''t exist. if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } // Create the file name with a calendar sortable date on the end. var now = DateTime.Now; filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day); // Check if the file that is about to be created already exists. If so, append a number to the end. if (File.Exists(filePath)) { var counter = 1; filePath = filePath.Replace(".txt", " (" + counter + ").txt"); while (File.Exists(filePath)) { filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt"); counter++; } } // Note that after the file is created, the file stream is still open. It needs to be closed // once it is created if other methods need to access it. using (var file = File.Create(filePath)) { file.Close(); } }


File.Create devuelve un FileStream. Debe cerrar eso cuando haya escrito en el archivo:

using (FileStream fs = File.Create(path, 1024)) { Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file."); // Add some information to the file. fs.Write(info, 0, info.Length); }

Puede usarlo para cerrar el archivo automáticamente.


Intente esto: funciona en cualquier caso, si el archivo no existe, lo creará y luego escribirá en él. Y si ya existe, no hay problema, se abrirá y escribirá en él:

using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite)) { fs.close(); } using (StreamWriter sw = new StreamWriter(@"File.txt")) { sw.WriteLine("bla bla bla"); sw.Close(); }


Sé que esta es una vieja pregunta, pero solo quiero decir que aún puedes usar File.Create("filename")" , simplemente agrega .Dispose() a ella.

File.Create("filename").Dispose();

De esta manera crea y cierra el archivo para el siguiente proceso para usarlo.


File.Create(FilePath).Close(); File.WriteAllText(FileText);


FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]); fs.Close();