Question

J'utilise l'objet StreamWriter pour écrire soit un fichier qui est créé par le constructeur ou existe déjà. Si le fichier existe alors il ajoute des données. Dans le cas contraire, il doit créer un fichier, puis ajoutez également des données. Le problème est que lorsque le fichier doit être créé, le constructeur StreamWriter crée le fichier mais ne pas écrire des données dans le fichier.

bool fileExists = File.Exists(filePath);

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
}

EDIT: Merci pour les réponses. Le bloc à l'aide prend soin de fermer l'écrivain. Comme pour d'autres personnes en disant cela fonctionne pour eux, est-il des informations que je peux vous donner à diagnostiquer davantage le problème? Le fichier est localed à travers un réseau. Serait-ce un problème potentiel. Je reçois les intermittence erreurs, « Impossible de trouver une partie du chemin ... » et « Le nom de réseau spécifié est plus disponible. »

Était-ce utile?

La solution 2

D'accord, donc je compris. Ma machine locale avait des problèmes pour accéder de façon intermittente le fichier sur le réseau. J'ai téléchargé le code au serveur et couru là sans aucun problème. J'apprécie vraiment toute l'aide. Je suis désolé la solution n'a pas été très excitant.

Autres conseils

Le code a fonctionné très bien sur mon ordinateur. Peut-on savoir ce que contient la variable filePath? Peut-être que vous regardiez le mauvais fichier ...

MISE À JOUR: Problème réseau? Peut-être que quelqu'un a fait quelque chose de l'autre côté du réseau. Essayez d'écrire dans un fichier local. Si cela fonctionne, essayez d'écrire dans un fichier distant sur un autre emplacement.

Pourrait essayer la fonction File.Open . Il est un bon exemple en bas et liste des FILEMODES FileMode.APPEND est ce que vous voulez

Votre code a fonctionné correctement pour moi ..

Essayez une instruction à l'aide

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
    writer.Flush();
}

De même à d'autres qui ont affiché, votre code fonctionne très bien sur mon PC.

Il peut être utile pour vous de casser votre code en deux parties, la première partie d'écrire l'en-tête si le fichier n'existe pas, alors la deuxième partie écriture des données:

try
{
    using (FileStream fs = new FileStream(filePath, FileMode.CreateNew))
    {
        using (StreamWriter sw = new StreamWriter(fs))
        {
            sw.WriteLine("start");
        }
    }
}
catch (IOException ex)
{
}

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    writer.WriteLine("data");
}

Votre code fonctionne pour moi, après 3 courses j'ai:

start
data
data
data

Êtes-vous sûr que vous n'êtes pas essayer fichier d'accès, que, pour une raison quelconque, vous ne pouvez pas y écrire? De plus, juste pour se assurer, le lieu writer.Close() avant d'en disposer, bien que Dispose() devrait rincer les données. Si cela ne va pas aider, essayez de créer le fichier manuellement à l'aide File.Create() avec des drapeaux appropriés.

// Edit: J'ai essayé ce code sur ma machine:

public unsafe static void Main()
{
    string filePath = @"\\COMP-NAME\Documents\foo.txt";
    FileStream fs = null;
    if (!File.Exists(filePath))
        fs = File.Create(filePath);
    else
        fs = File.Open(filePath, FileMode.Append);

    using (StreamWriter writer = new StreamWriter(fs))
    {
        writer.WriteLine("data");
    }
}

Et il fonctionne bien, pourrait essayer celui-ci?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top