Forum: PC-Programmierung Filestream C#


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Entwickler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

in meiner Anwendung wird zyklisch Daten mit Filestream in eine Textdatei 
gespeichert. Der zyklische Vorgang läuft in einem Windows.Forms.Timer. 
Nun habe ich noch einen Backgroundworker, der nach einer gewissen Zeit 
ebenfalls auf die gleiche Datei speichernd mit Filestream zugreift. Nun 
entsteht natürlich ein Exception in dem Backgroundworker, der sagt, dass 
die Datei bereits zum speichern geöffnet wurde. Was könnte ich nun tun, 
sobald der Backgroundworker auf die gleiche Datei zugreifen möchte?

von t_k (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Entwickler schrieb:
> Was könnte ich nun tun,
> sobald der Backgroundworker auf die gleiche Datei zugreifen möchte?

die Datei vorher schliessen

von Entwickler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok das wäre natürlich eine Lösung. Ich habe mir noch folgendes überlegt, 
allerdings scheitert dies bei der programmiertechnischen Umsetzung. Ich 
könnte auch ein Event an den Wibndows.Forms.Timer senden. Wie könnte in 
C# ein Event generiert, ausgelöst und gelöscht werden? Ich habe mal was 
von Action gehört.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Entwickler schrieb:
> Ok das wäre natürlich eine Lösung. Ich habe mir noch folgendes überlegt,
> allerdings scheitert dies bei der programmiertechnischen Umsetzung. Ich
> könnte auch ein Event an den Wibndows.Forms.Timer senden. Wie könnte in
> C# ein Event generiert, ausgelöst und gelöscht werden? Ich habe mal was
> von Action gehört.

wozu der aufwand? du musst doch nur auf das gleiche Filestream objekt 
zugreifen.

Du musst nur extra noch dafür sorgen, das nicht von beiden stellen 
gleichzeitig geschrieben wird.

von nicht"Gast" (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin,


das ist relativ einfach. Du "lockst" den Zugriff auf die Datei
   // muss für beide code teile das gleiche sein
   object lockObject  = new Object(); 

   lock(lockObject){
          // datei schreiben hier
   }

   lock(lockObject){
          // datei lesen in einem anderen Thread hier
   }


Grüße,

von t_k (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Entwickler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Die lock Variante habe ich nun mal eingesetzt. Wie könnte 
man auf einfache Weise mit Filestream oder STreamWriter den Dateiinhalt 
einer Datei komplett löschen?

von bluppdidupp (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit FileStream.SetLength die Dateigröße auf 0 setzen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.