GELÖST OpenFileDialog

Diskutiere OpenFileDialog im Programmierung Forum im Bereich Software Forum; Hallo erst einmal. Ich schreibe gerade ein Programm welches meinen Arbeitskollegen die Arbeit abnimmt die von ihm erstellten *.mcr Dateien zum...
M

Marcel S

Threadstarter
Mitglied seit
16.11.2009
Beiträge
6
Alter
32
Hallo erst einmal.

Ich schreibe gerade ein Programm welches meinen Arbeitskollegen die Arbeit abnimmt die von ihm erstellten *.mcr Dateien zum Fräsen durchzusichten nach falsch programmierten Stellen. Jetzt stehe ich vor einem kleinen Problem.

Wie lese ich die vom ofd geöffnete Datei aus sodas ich sie als string bearbeiten kann bzw. ich das möglich da die Programme rund 24000 Zeilen haben und edliche Zeichen. Und wie speichere ich sich dann unter dem selben namen wieder ab. Habe da schon was probiert aber ne Fehlermeldung bekommen da die Datei in verwendung war (war ja auch klar da das Prog. selber damit gearbeitet hat)

Wie lösche ich nicht bloß Textstellen mit samt der leeren Zeile die dann entsteht. Die betreffenden Textstellen heißen immer gleich sind aber immer an unterschiedlichen Positionen.

ps. ich verwende VB 2008 Express

Vielen Dank euch dann schon einmal im Voraus

MfG Marcel S.
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
:welcome

Für gewöhnlich arbeitet man solche Textdateien Zeile für Zeile ab. Verwende dazu die ReadLine()-Methode im FileStreamReader-Objekt in einer Programmschleife.

Bei Textdateien ist es allerdings NICHT empfehlenswert, wenn mehrere Programme auf einmal darauf zugreifen. Außerdem glaube ich, wird das Fräsprogramm sicher davon gestört werden, wenn der Code AdHoc geändert wird, oder? Da wäre es besser alle Änderungen in eine temporäre Datei zu schreiben und die Datei dann nach Beenden des Fräsprogramms auszutauschen.

Ich habe mal schnell etwas zusammengetippt, wie es funktionieren könnte. Allerdings kann man nicht einfach so mitten in eine Textdatei reinschreiben. Da musst du schon selber ein wenig probieren...enweder durch einen zweiten FileStream oder mit dem Setzen der Position. Notfalls eben Byte-Weise. ;)

Oder besser: Mit einem StringBuilder kannst du die Datei allerdings in den Hauptspeicher laden und dann in einem Rutsch auf die Platte schreiben. Da ein String bis zu 2 GB groß werden darf, sollte das kein Problem sein, sofern die Hardware da keine Grenzen setzt. Obwohl mit 24000 Zeilen die Datei sicher nicht so viel Platz einnehmen wird. Ansonsten muss eben eine temporäre Datei herhalten. ;) (VORSICHT! Unbedingt einen StringBuilder verwenden, sonst wird das extrem langsam!)

Code:
   Dim dlg As New OpenFileDialog()
    Dim w As IO.StreamWriter
    Dim r As IO.StreamReader
    Dim fs As IO.Stream
    Dim line As String

    'Zeige Dialog
    If (dlg.ShowDialog() = Windows.Forms.DialogResult.OK) Then

      'Öffne Datei im gemeinsamen Modus zum Schreiben
      '(Andere Programme dürfen nur lesen)
      fs = IO.File.Open(dlg.FileName, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.Read)

      'Erstelle Objekte zum Lesen und Schreiben
      w = New IO.StreamWriter(fs)
      r = New IO.StreamReader(fs)

      'Lese Datei Zeile für Zeile aus
      While (Not r.EndOfStream)
        'Lese nächste Zeile
        line = r.ReadLine()

        'Hier kommt dein Code rein

      End While

      r.Close()
      w.Close()
    End If
 
M

Marcel S

Threadstarter
Mitglied seit
16.11.2009
Beiträge
6
Alter
32
Das programm selber ist noch net aktiv an der Fräse .. das wird vorher gemacht nur ich habe mir jetzt auch mal eine datei schicken lassen und musste feststellen das so eine Datei rund 4mio. Zeichen enthält. ist das dann überhaupt realisierbar den text in nen string zu laden?



vielen Dank schonmal =)
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Also 4 Mio. Ascii-Zeichen sind ca. 3,8 MByte groß. Bei Unicode (.NET-Strings sind Unicode) kannst du mit dem Doppelten bzw. 3-fachen Rechnen. ;) (Über den Daumen geschätzt, sollte aber hinkommen)

Normalerweise ist es aber empfehlenswert einfach eine temporäre Datei zu erstellen. Du liest also eine Zeile aus der Eingabedatei, modifizierst sie und schreibst sie in die Ausgabedatei.

Es sei den du schreibst einen Parser und musst die Daten auch interpretieren, dann wäre es besonders von der Performance her besser das interpretierte Modell mit den Tokens in den RAM zu laden.

Im Endeffekt entscheidest du also zwischen:
1) Einlesen mit StringBuilder in den Hauptspeicher => Schneller, dafür mehr Speicher
2) Einlesen und sofortiges Schreiben in eine temporäre Datei => Langsamer, sehr wenig Speicherbedarf

Von der Implementierung sollte beides gleich viel Aufwand bedeuten.
 
M

Marcel S

Threadstarter
Mitglied seit
16.11.2009
Beiträge
6
Alter
32
Vielen Dank dann. Werde mich dann jetzt mal an die Arbeit machen.
 
Thema:

OpenFileDialog

OpenFileDialog - Ähnliche Themen

  • GELÖST C# - OpenFileDialog lässt Applikation einfrieren

    GELÖST C# - OpenFileDialog lässt Applikation einfrieren: Hallo, ich habe ein merkwürdiges Problem... ich habe folgenden Code: OpenFileDialog FileDia = new OpenFileDialog(); FileDia.Filter =...
  • Ähnliche Themen

    Oben