Frage

Ich bin mit dem Streamwriter-Objekt entweder eine Datei zu schreiben, die von dem Konstruktor erstellt oder bereits vorhanden ist. Wenn die Datei vorhanden ist, dann hängt es Daten. Wenn nicht, dann sollte es eine Datei erstellen und dann auch Daten anhängen. Das Problem ist, dass, wenn die Datei erstellt werden muss, erstellt der Konstruktor Streamwriter die Datei aber schreibt keine Daten in die Datei.

bool fileExists = File.Exists(filePath);

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

    writer.WriteLine("data");
}

EDIT: Danke für die Antworten. Die Verwendung von Block übernimmt den Verfasser des Schließens. Was andere Leute sagen, dass es für sie arbeitet, gibt es keine Informationen, die ich Ihnen weiter geben kann, um das Problem zu diagnostizieren? Die Datei wird über ein Netzwerk localed. Könnte das ein potenzielles Problem sein. Intermittently erhalte ich die Fehler „nicht einen Teil des Weges finden kann ...“ und „Der angegebene Netzwerkname ist nicht mehr verfügbar.“

War es hilfreich?

Lösung 2

In Ordnung, also dachte ich es aus. Meine lokale Maschine wurde mit Unterbrechungen Problemen, die Datei über das Netzwerk zugreifen. Ich lud den Code auf den Server und lief es dort ohne Probleme. Ich schätze all die Hilfe wirklich. Es tut mir leid die Lösung war nicht sehr aufregend.

Andere Tipps

Der Code lief auf meinem Computer in Ordnung. Können wir wissen, was die Variable filePath enthält? Vielleicht waren Sie an der falschen Datei suchen ...

UPDATE: Netzwerk-Problem? Vielleicht etwas auf der anderen Seite des Netzes jemand tat. Versuchen Sie, eine lokale Datei zu schreiben. Wenn es funktioniert, versuchen Sie auf einem anderen Ort zu einer Remote-Datei zu schreiben.

könnte versuchen, die File.Open Funktion. Es ist ein gutes Beispiel an der Unterseite und Liste der FileModes FileMode.APPEND ist, was Sie wollen

Ihr Code richtig für mich gearbeitet ..

Versuchen Sie eine using-Anweisung

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

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

Ähnlich wie andere, die Beiträge geschrieben haben, den Code auf meinem PC funktioniert.

Es könnte helfen, für Sie den Code in zwei Teile zu brechen, wobei der erste Teil das Schreiben der Header, wenn die Datei nicht bereits vorhanden ist, dann wird der zweite Teil der Daten zu schreiben:

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

Der Code funktioniert für mich, nach 3 Läufen ich habe:

start
data
data
data

Sind Sie sicher, dass Ihr nicht versuchen, Access-Datei, die Sie aus irgendeinem Grund nicht darauf schreiben kann? Auch, um sicherzustellen, Platz writer.Close() bevor sie entsorgen, obwohl Dispose() sollten die Daten spülen. Wenn dies nicht hilft, versuchen Sie die Datei manuell mit entsprechenden Flags mit File.Create() erstellen.

// Edit: Ich habe diesen Code versucht, auf meinem Rechner:

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

Und es reibungslos läuft, könnte dies ein Versuch?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top