2012-04-30 41 views
37

Tôi cần lấy mã của mình để đọc nếu tệp không tồn tại tạo khác thêm. Ngay bây giờ nó đang đọc nếu nó tồn tại tạo và nối thêm. Đây là mã:Tạo tệp nếu tệp không tồn tại

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

Tôi có làm điều này không?

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) - điều này đang làm chính xác những gì bạn cần trong một dòng mã. –

+0

@ShadowWizard Kể từ lần thứ được gắn thẻ bài tập về nhà OP thực sự có thể được hướng dẫn để hiển thị logic có điều kiện. – Yuck

+4

@Yuck - bài tập về nhà để phát minh lại bánh xe? Kinh quá! ;) –

Trả lời

63

Bạn có thể chỉ cần gọi

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

Nó sẽ tạo ra các tập tin nếu nó không tồn tại và mở file cho phụ.

Edit:

này là đủ:

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

Nhưng nếu bạn nhấn mạnh vào việc kiểm tra đầu tiên, bạn có thể làm một cái gì đó như thế này, nhưng tôi không nhìn thấy điểm.

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

Ngoài ra, một điều cần chỉ ra với mã của bạn là bạn đang thực hiện rất nhiều việc unboxing không cần thiết. Nếu bạn phải sử dụng bộ sưu tập đơn giản (không chung chung) như ArrayList, thì hãy bỏ chọn đối tượng một lần và sử dụng tham chiếu.

Tuy nhiên, tôi perfer sử dụng List<> cho bộ sưu tập của tôi:

public class EmployeeList : List<Employee> 
6

Có, bạn cần phải phủ nhận File.Exists(path) nếu bạn muốn kiểm tra xem file không tồn tại.

12

hay:

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

Ví dụ

string rootPath = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); 
     rootPath += "MTN"; 
     if (!(File.Exists(rootPath))) 
     { 
      File.CreateText(rootPath); 
     } 
Các vấn đề liên quan