Ich muss meinen Code lesen lassen, wenn die Datei nicht vorhanden ist. Im Moment liest es, ob es existiert, erstellen und anhängen. Hier ist der Code:
if (File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
Würde ich das tun?
if (! File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
Bearbeiten:
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
quelle
quelle
Antworten:
Sie können einfach anrufen
using (StreamWriter w = File.AppendText("log.txt"))
Die Datei wird erstellt, wenn sie nicht vorhanden ist, und die Datei zum Anhängen geöffnet.
Bearbeiten:
Dies ist ausreichend:
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); } }
Aber wenn Sie darauf bestehen, zuerst zu überprüfen, können Sie so etwas tun, aber ich verstehe den Punkt nicht.
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); } }
Eine Sache, die Sie mit Ihrem Code hervorheben sollten, ist, dass Sie viel unnötiges Unboxing durchführen. Wenn Sie eine einfache (nicht generische) Sammlung wie verwenden müssen
ArrayList
, entpacken Sie das Objekt einmal und verwenden Sie die Referenz.Ich bevorzuge jedoch die Verwendung
List<>
für meine Sammlungen:public class EmployeeList : List<Employee>
quelle
oder:
using FileStream fileStream = File.Open(path, FileMode.Append); using StreamWriter file = new StreamWriter(fileStream); // ...
quelle
Sie müssen die Prüfung nicht einmal manuell durchführen, File.Open erledigt dies für Sie. Versuchen:
using (StreamWriter sw = new StreamWriter(File.Open(path, System.IO.FileMode.Append))) {
Ref: http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx
quelle
Ja, Sie müssen negieren,
File.Exists(path)
wenn Sie überprüfen möchten, ob die Datei nicht vorhanden ist.quelle
Zum Beispiel
string rootPath = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); rootPath += "MTN"; if (!(File.Exists(rootPath))) { File.CreateText(rootPath); }
quelle
if (!(File.Exists(...)))
, aber vorher erstellt wirdFile.CreateText(...)
, überschrieben wird.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; }
quelle
Das funktioniert auch bei mir
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(); }
quelle
Dies ermöglicht das Anhängen an eine Datei mit StreamWriter
using (StreamWriter stream = new StreamWriter("YourFilePath", true)) {...}
Dies ist der Standardmodus, nicht an Datei anhängen und eine neue Datei erstellen.
using (StreamWriter stream = new StreamWriter("YourFilePath", false)){...} or using (StreamWriter stream = new StreamWriter("YourFilePath")){...}
Wie auch immer, wenn Sie überprüfen möchten, ob die Datei vorhanden ist, und dann andere Dinge tun möchten, können Sie verwenden
using (StreamWriter sw = (File.Exists(path)) ? File.AppendText(path) : File.CreateText(path)) {...}
quelle