Necesito que mi código se lea si el archivo no existe, crear más agregar. Ahora mismo está leyendo si existe crear y adjuntar. Aquí está el código:
if (File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
¿Haría esto?
if (! File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
Editar:
string path = txtFilePath.Text;
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
foreach (var line in employeeList.Items)
{
sw.WriteLine(((Employee)line).FirstName);
sw.WriteLine(((Employee)line).LastName);
sw.WriteLine(((Employee)line).JobTitle);
}
}
}
else
{
StreamWriter sw = File.AppendText(path);
foreach (var line in employeeList.Items)
{
sw.WriteLine(((Employee)line).FirstName);
sw.WriteLine(((Employee)line).LastName);
sw.WriteLine(((Employee)line).JobTitle);
}
sw.Close();
}
}
c#
streamwriter
Shan
fuente
fuente
Respuestas:
Simplemente puedes llamar
using (StreamWriter w = File.AppendText("log.txt"))
Creará el archivo si no existe y lo abrirá para agregarlo.
Editar:
Esto es suficiente:
string path = txtFilePath.Text; using(StreamWriter sw = File.AppendText(path)) { foreach (var line in employeeList.Items) { Employee e = (Employee)line; // unbox once sw.WriteLine(e.FirstName); sw.WriteLine(e.LastName); sw.WriteLine(e.JobTitle); } }
Pero si insiste en verificar primero, puede hacer algo como esto, pero no veo el sentido.
string path = txtFilePath.Text; using (StreamWriter sw = (File.Exists(path)) ? File.AppendText(path) : File.CreateText(path)) { foreach (var line in employeeList.Items) { sw.WriteLine(((Employee)line).FirstName); sw.WriteLine(((Employee)line).LastName); sw.WriteLine(((Employee)line).JobTitle); } }
Además, una cosa para señalar con su código es que está haciendo mucho unboxing innecesario. Si tienes que usar una colección simple (no genérica) como
ArrayList
, desempaqueta el objeto una vez y usa la referencia.Sin embargo, prefiero usar
List<>
para mis colecciones:public class EmployeeList : List<Employee>
fuente
o:
using FileStream fileStream = File.Open(path, FileMode.Append); using StreamWriter file = new StreamWriter(fileStream); // ...
fuente
Ni siquiera necesita hacer la verificación manualmente, File.Open lo hace por usted. Tratar:
using (StreamWriter sw = new StreamWriter(File.Open(path, System.IO.FileMode.Append))) {
Ref: http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx
fuente
Sí, debe negar
File.Exists(path)
si desea verificar si el archivo no existe.fuente
Por ejemplo
string rootPath = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); rootPath += "MTN"; if (!(File.Exists(rootPath))) { File.CreateText(rootPath); }
fuente
if (!(File.Exists(...)))
, pero antesFile.CreateText(...)
, se sobrescribe.private List<Url> AddURLToFile(Urls urls, Url url) { string filePath = @"D:\test\file.json"; urls.UrlList.Add(url); //if (!System.IO.File.Exists(filePath)) // using (System.IO.File.Delete(filePath)); System.IO.File.WriteAllText(filePath, JsonConvert.SerializeObject(urls.UrlList)); //using (StreamWriter sw = (System.IO.File.Exists(filePath)) ? System.IO.File.AppendText(filePath) : System.IO.File.CreateText(filePath)) //{ // sw.WriteLine(JsonConvert.SerializeObject(urls.UrlList)); //} return urls.UrlList; } private List<Url> ReadURLToFile() { // string filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"App_Data\file.json"); string filePath = @"D:\test\file.json"; List<Url> result = new List<Url>(); ; if (!System.IO.File.Exists(filePath)) using (System.IO.File.CreateText(filePath)) ; using (StreamReader file = new StreamReader(filePath)) { result = JsonConvert.DeserializeObject<List<Url>>(file.ReadToEnd()); file.Close(); } if (result == null) result = new List<Url>(); return result; }
fuente
Esto funciona bien para mi
string path = TextFile + ".txt"; if (!File.Exists(HttpContext.Current.Server.MapPath(path))) { File.Create(HttpContext.Current.Server.MapPath(path)).Close(); } using (StreamWriter w = File.AppendText(HttpContext.Current.Server.MapPath(path))) { w.WriteLine("{0}", "Hello World"); w.Flush(); w.Close(); }
fuente
Esto permitirá agregar al archivo usando StreamWriter
using (StreamWriter stream = new StreamWriter("YourFilePath", true)) {...}
Este es el modo predeterminado, no agregar al archivo y crear un nuevo archivo.
using (StreamWriter stream = new StreamWriter("YourFilePath", false)){...} or using (StreamWriter stream = new StreamWriter("YourFilePath")){...}
De todos modos, si desea verificar si el archivo existe y luego hacer otras cosas, puede usar
using (StreamWriter sw = (File.Exists(path)) ? File.AppendText(path) : File.CreateText(path)) {...}
fuente