2012-04-30 19 views
37

Potrzebuję uzyskać mój kod do przeczytania, jeśli plik nie istnieje, dodaj inne. Teraz czyta, czy istnieje, tworzyć i dołączać. Oto kod:Utwórz plik, jeśli plik nie istnieje

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

Czy mogę to zrobić?

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

Edit:

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

}

+1

[File.AppendAllText] (http: // msdn .microsoft.com/en-us/library/ms143356.aspx) - robi dokładnie to, czego potrzebujesz w jednym wierszu kodu. –

+0

@ShadowWizard Od jest otagowane zadanie domowe OP może być rzeczywiście skierowane, aby pokazać logikę warunkową. – Yuck

+4

@Yuck - zadanie domowe, aby odkryć nowe koło? Fuj! ;) –

Odpowiedz

63

Możesz po prostu zadzwonić

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

To utworzy plik, jeśli nie istnieje i otworzyć plik do dopisywania.

Edit:

ta jest wystarczająca:

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

Ale jeśli nalegać na sprawdzenie najpierw, można zrobić coś takiego, ale nie widzę sensu.

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

Również jedno podkreślić, ze kod jest, że robisz wiele niepotrzebnych unboxing. Jeśli musisz użyć zwykłej (nie generycznej) kolekcji, takiej jak ArrayList, rozwiń jeden raz obiekt i użyj odniesienia.

Jednak perfer używać List<> dla moich kolekcji:

public class EmployeeList : List<Employee> 
6

Tak, trzeba zanegować File.Exists(path) jeśli chcesz sprawdzić, czy plik nie istnieje.

12

czyli

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

Dla przykładu

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