Hey Leute,
habe ein kleines anwendungstechnisches Problem.
Also ich würde gerne mit meinem Programm direkt eine Datei auf der Festplatte des aktuellen Rechners erzeugen und dann sofort mit einem Stream Daten reinschreiben. Hier ein kleiner Auszug von meinem Programm
File.Create(path+"\\nameDerDatei.csv");
using (StreamWriter writer = new StreamWriter(path+"\\nameDerDatei.csv"))
{
for (int i = 0; i < data.Length; i++)
{
writer.WriteLine(data[i]);
}
};
Als Exception erhalte ich:
The process cannot access the file 'C:\temp\nameDerDatei.csv' because it is being used by another process.
Weiß jemand, wie man diese Fehlermeldung umgehen kann?
Gruß
NewCoder
Nur eine Vermutung. Ist evtl. das erstellen der csv Datei noch nicht beendet, wenn du mittels StreamWriter zugreifst? Also das der Code zu schnell ausgeführt wird?
Testen könntest du es, in dem du den Thread mit Thread.Sleep(1000) für eine Sekunde oder länger kurz schlafen lässt.
Wäre es evlt. sinnvoller, die Datei erst im Speicher zu erstellen und anschließend auf die Platte zu schreiben?
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
File.Create(path+"\nameDerDatei.csv"); erstellt die atei und öffnet sie. Sie ist nun nicht mehr für andere handles nicht schreib und lesbar. Deswegen kannst du sie dann nichtmehr mit dem StreamWriter öffnen.
using (StreamWriter writer = new StreamWriter(File.Create(path+"\\nameDerDatei.csv")))
{
for (int i = 0; i < data.Length; i++)
{
writer.WriteLine(data[i]);
}
};
Sollte funktionieren
@dN!3L
Cool, funktioniert wunderbar.
@davidG
Habe das mal mit dem Thread.Sleep(1000) ausprobiert. Also der Erstellungsvorgang scheint schnell genug zu sein.
Wäre es evlt. sinnvoller, die Datei erst im Speicher zu erstellen und anschließend auf die Platte zu schreiben?
Mal so aus Interesse. Wie hätte ich die Datei zuerst im Speicher erzeugen können? Das Array mit den Daten existiert ja. Wie hätte ich die Datei im Speicher erzeugen können, ohne sie auf die Festplatte zu schreiben?
@pdelvo
Hätte ich es auch erzwingen können, dass ich von mehreren Ressourcen gleichzeitig in die Datei schreiben kann. Dann müsste ich aber zuerst ein FileStream Objekt erzeugen und dann den Parameter auf true setzen, der das Reinschreiben ermöglicht, oder?
Könnte es dann sein, dass es Probleme mit dem Schreiben gibt, da zwei Ressourcen darauf zugreifen, obwohl ja nur von einer Datei her geschrieben wird?
Hallo,
Wie hätte ich die Datei im Speicher erzeugen können, ohne sie auf die Festplatte zu schreiben?
Aus Sicht des Programms ist die Datei ja lediglich ein Stream, und zwar bei einer echten Datei ein FileStream
. Das Äquvalent im Arbeitsspeicher wäre ein MemoryStream
.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca