web-dev-qa-db-fra.com

Créer un fichier si le fichier n'existe pas

Je dois obtenir mon code pour lire si le fichier n'existe pas créer d'autre ajouter. En ce moment, il lit s'il existe, crée et ajoute. Voici le code:

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

Est-ce que je ferais ça?

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

Modifier:

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

}

65
shan

Vous pouvez simplement appeler

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

Il créera le fichier s'il n'existe pas et l'ouvrira pour l'ajouter.

Modifier:

C'est suffisant:

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

Mais si vous insistez pour vérifier d'abord, vous pouvez faire quelque chose comme ça, mais je ne vois pas le but.

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

En outre, une chose à souligner avec votre code est que vous effectuez beaucoup de déballage inutile. Si vous devez utiliser une collection simple (non générique) telle que ArrayList, désarchivez l'objet une fois et utilisez la référence.

Cependant, je préfère utiliser List<> pour mes collections:

public class EmployeeList : List<Employee>
93
Chris Gessler

ou:

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

Vous n'avez même pas besoin de faire la vérification manuellement, File.Open le fait pour vous. Essayer:

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

Réf.: http://msdn.Microsoft.com/en-us/library/system.io.filemode.aspx

13
Andee

Oui, vous devez annuler File.Exists(path) si vous souhaitez vérifier si le fichier n'existe pas existe.

6
Jakub Konecki

Par exemple

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