Подтвердить что ты не робот

Создать файл, если файл не существует

Мне нужно, чтобы мой код читался, если файл не существует, создайте else append. Сейчас он читает, если он существует, создает и добавляет. Вот код:

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

Я сделал бы это?

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

}

4b9b3361

Ответ 1

Вы можете просто вызвать

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

Он создаст файл, если он не существует, и откройте файл для добавления.

Edit:

Этого достаточно:

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, затем разблокировать объект один раз и использовать ссылку.

Однако я предпочитаю использовать List<> для моих коллекций:

public class EmployeeList : List<Employee>

Ответ 2

или

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

Ответ 3

Вам даже не нужно делать проверку вручную, 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

Ответ 4

Да, вам нужно отменить File.Exists(path), если вы хотите проверить, не существует ли файл.

Ответ 5

Пример

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