如果文件不存在,则创build文件

我需要让我的代码读取,如果文件不存在创buildelse append。 现在它正在阅读,如果它存在创build和追加。 这里是代码:

if (File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { 

我会这样做吗?

 if (! File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { 

编辑:

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

}

你可以直接打电话

 using (StreamWriter w = File.AppendText("log.txt")) 

它将创build该文件,如果它不存在,并打开该文件进行追加。

编辑:

这已经足够了:

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

但是,如果你坚持先检查,你可以做这样的事情,但我不明白这一点。

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

另外,有一件事要指出你的代码是你正在做很多不必要的拆箱。 如果您必须使用像ArrayList这样的普通(非generics)集合,请将对象解除一次并使用引用。

不过,我倾向于使用List<>作为我的集合:

 public class EmployeeList : List<Employee> 

要么:

 using(var fileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { using (StreamWriter sw = new StreamWriter(path, true)) { //... } } 

你甚至不需要手动进行检查,File.Open为你做。 尝试:

 using (StreamWriter sw = new StreamWriter(File.Open(path, System.IO.FileMode.Append))) { 

参考: http : //msdn.microsoft.com/en-us/library/system.io.filemode.aspx

是的,如果你想检查文件是否不存在,你需要否定File.Exists(path)

例如

  string rootPath = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); rootPath += "MTN"; if (!(File.Exists(rootPath))) { File.CreateText(rootPath); }