| 

.NET C# Java Javascript Exception

3
Hallo,
ich bin gerade dabei eine Anwendung für Windows CE umzusetzen und habe das Problem das es keine ".Dispose()" funktionalität bei Windows CE in Kombination mit VB .Net gibt.
Kennst sich da jemand aus bzw. gibt es eine andere möglichkeit eine Datei auf die man mit einem streamreader zugreift wieder frei zu geben?
Bspl
Dim sr as new streamreader("\My Documents\sync\dateiname.datei")
sw.readline(...
...sw.close
und hier müsste der sw.dispose() kommen.was unter CE nicht geht.

Gruß
News:
10.11.2009
spicejam 853 2 6
1
Laut MSDN (http://msdn.microsoft.com/en-us/library/ms227564.aspx) sollte Dispose für den TextWriter (=Basisklasse des Streamwriters) vorhanden sein. Bist du dir sicher? (Ich kann das nicht selbst prüfen).
gfoidl 10.11.2009
Ja laut MSDN sollte es funktionieren. Tut es auch unter Windows xp. Allerdings nicht unter Windows CE. Gibt es sonst noch möglichkeiten Dateien wieder freizugeben? Ich möchte nämlich eine Datei die ich gelesen haben dannach löschen.
spicejam 10.11.2009
2 Antworten
2
Funktioniert
using (StreamWriter sw = new StreamWriter(....))
{
// Verwendenung des StreamWriters
}

Hier wird Dispose automatisch aufgerufen.


Gruss
Günther
10.11.2009
gfoidl 9,4k 3 5
Unter Windows CE nach ablauf von using?
spicejam 10.11.2009
Also ich hab es jetzt mal getestet. Die Datei lässt sich weiterhin nicht löschen io.file.delete exception...
spicejam 10.11.2009
Per Definition von using ist das so. Sollte auf allen Plattformen auf denen .net läuft so sein.
gfoidl 10.11.2009
Probier mal mit Thread.Sleep(500) etwas zu warten und dann zu löschen. Es kann ja auch sein dass das OS die Datei nicht unmittelbar freigibt.
gfoidl 10.11.2009
Der sogenannte dispose (via using) wird bei mir in Form1 ausgeführt. Es durchlaufen dannach 5 weitere Formen in denen man Fragen beantwortet. Bei der zu letzt geladenen Form möchte ich die gelesene Datei löschen und eine "Ergebnisdatei" in einem anderen Ordner ablegen. Vllt verstehst du mein vorgehen. Deswegen denk ich nicht das das mit dem unmittelbaren Löschversuch zusammen hängt. Sonst noch iwelche Ideen?
spicejam 10.11.2009
0
Vielleicht solltest Du dir mal die Version von Windows CE anschauen.
Eine Übersicht welches .NET Framework mit welcher Windows CE Version passt findest du hier.

Noch eine Idee wäre vielleicht Dir auch mal die Finalize() Methode anzuschauen. Diese führt dazu das Object vor der Übergabe an den GC, zu bereinigen.
10.11.2009
Mario Priebe 6,0k 3 9
Von der Idee mit Finalize rate ich ab. Die Gründe dafür stehen in der MSDN.
gfoidl 11.11.2009
Welchen genauen Grund dafür meinst?
Mario Priebe 11.11.2009
2
Kurz gesagt:
a) Finalize ist dazu nicht gedacht -> IDisposable ist korrekt. Siehe "Every implementation of Finalize in a derived type must call its base type's implementation of Finalize. This is the only case in which application code is allowed to call Finalize."
b) Mit Finalize kommen die Objekte in den Finalizer-Queue des GC und erst beim nächsten Müllsammeln werden die Objekte wirklich freigegeben (daher auch GC.SupressFinalize bei IDisposable, weil es nicht nötig ist)
gfoidl 11.11.2009
Okay, ich danke
Mario Priebe 11.11.2009
Also bringt alles nichts. Was meint ihr zu einem Filestream (denke da an filemode.open) gekoppelt mit streamreader?
spicejam 11.11.2009
1
Ein StreamReader verwendet intern auch nur einen Filestream. Daher ändert sich somit nichts.
gfoidl 11.11.2009
Ich hab etz das ganze versucht über eine externe exe zu löschen. Das ganze liegt dann wohl doch beim "file.delete" da stimmt iwas nicht :S. naja danke euch für die Hilfe.
spicejam 12.11.2009
Ich nehme das wieder zurück, habe die Anwendung nicht richtig geschlossen.(app.exit anstatt me.close) Ist zwar jetzt einbischen unschön gelöst aber es funktioniert. Danke
spicejam 12.11.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH