...mit Programm eine Datei öffnen und des Pfad der Datei und den Dateinamen in separaten Texboxen ausgeben

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von varo.biker.

    ...mit Programm eine Datei öffnen und des Pfad der Datei und den Dateinamen in separaten Texboxen ausgeben

    Hallo,

    ich möchte in einem Programm Dateien öffnen, dazu initiiere ich einen OpenFilesDialog. Der Grundpfad ist auf c:\ eingestellt, so dass der User zu seinem Ablageort seiner Dateien navigieren kann. Um dem User die Kontrolle zu geben möchte ich den Pfad in einer Textbox ausgeben und die Datei die er gerade geöffnet hat in einer weiteren.
    Da der FileStreamreader sehr empfindlich auf nicht ausgewählte oder bereits geöffnete Dateien reagiert möchte ich gern vorher eine entsprechende Fehlerroutine setzen. Kann mir jemand bei diesem Konstrukt helfen ich bin gerade mal 2 Wochen an VB dran.

    Danke im voraus.

    Grüße varo.biker
    Mit Systen.IO.File.Exists() testest Du, ob ein File da ist.
    Bau Dir folgenden Konstrukt:

    VB.NET-Quellcode

    1. Try
    2. Using sr As System.IO.StreamReader = System.IO.File.OpenText(AktFileName)
    3. ' hier File-Inhalt behandeln
    4. End Using
    5. Catch ex As Exception
    6. End Try
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erst einmal vielen Dank für die promte Antwort aber bitte nicht böse sein, ich nix verstehn

    mein Konstrukt (mit fremder Hilfe) sieht z.Z. so aus:


    Brainfuck-Quellcode

    1. '##### Radio.Button klicken - Sprung zum Fenster Frequenzbereiche Menü
    2. Private Sub rbut_hauptm_freq_bereiche_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbut_hauptm_freq_bereiche_offline.CheckedChanged
    3. If rbut_hauptm_freq_bereiche_offline.Checked = True Then
    4. Dim ofd As New OpenFileDialog
    5. ofd.InitialDirectory = "C:\Users\..........."
    6. ofd.Filter = "csv-Datei (*.csv)|*.csv|" & " Alle Dateien (*.*)|*.*"
    7. ofd.Title = "Datei zum Öffnen auswählen"
    8. If ofd.ShowDialog() = DialogResult.OK Then
    9. Dim fs As New FileStream(ofd.FileName, FileMode.Open)
    10. Dim sr As New StreamReader(fs)
    11. Dim str_zeile As String
    12. Dim int_zeile As Integer = 1 'Zähler für Schleife
    13. Dim lst_kopfdaten As New List(Of String) ' Definition der Liste mit Kopfdaten
    14. Dim lst_messdaten As New List(Of Double()) ' Liste mit Messdaten (mit Double-Array Werten)
    15. Dim lst_frequenzen As New List(Of Double) ' Liste der Frequenzen
    16. ' Datei-Inhalt als getrennte Listen in den Speicher laden
    17. ' -------------------------------------------
    18. Do While sr.Peek() > -1
    19. str_zeile = sr.ReadLine()
    20. If int_zeile < 35 Then ' Einlesen der Kopfdaten (bis Zeile 34)
    21. lst_kopfdaten.Add(str_zeile)
    22. ' Einlesen der Messdaten (ab Zeile 35)
    23. Else
    24. ' Aufsplitten der Zeile mit Messdaten (Trenner = ;)
    25. Dim str_temp_messdaten() As String = Split(str_zeile, ";")
    26. ' Extrahieren der Messwerte und zuweisen zu den entspechenden Positionen
    27. Dim dbl_freq As Double = CDbl(str_temp_messdaten(0))
    28. Dim dbl_dbm_min As Double = CDbl(str_temp_messdaten(1))
    29. Dim dbl_dmb_max As Double = CDbl(str_temp_messdaten(2))
    30. ' Zusammenstellen der Messwerte und zur Liste lst_messdaten hinzufuegen
    31. Dim dbl_messdaten As Double() = {dbl_freq, dbl_dbm_min, dbl_dmb_max}
    32. lst_messdaten.Add(dbl_messdaten)
    33. ' Frequenz zu Double-Array der Frequenzen hinzufuegen fuer Eingabepruefung
    34. lst_frequenzen.Add(dbl_freq)
    35. End If
    36. ' Zeilen-Zaehler erhoehen
    37. int_zeile += 1
    38. Loop
    39. dbl_frq_min = lst_frequenzen(0).ToString()
    40. dbl_frq_max = lst_frequenzen(lst_frequenzen.Count - 1).ToString()
    41. Else
    42. MessageBox.Show("Abbruch")
    43. End If
    44. ' #### aufrufen des Fensters "Frequenzeingabe zur Festlegung des Auswertebereiches der Meßdatendatei ####
    45. frm_freq_bereiche_offline.Show() ' beim klicken des Button "Frequenzeingabe" wird das Fenster "Frequenzeingabe" aufgerufen
    46. Me.Enabled = False ' das Fenster "Hauptmenü" wird deaktiviert
    47. rbut_hauptm_freq_bereiche_offline.Checked = False
    48. End If
    49. '##################Fehler leerer Pfad bei drücken Abbruch - muß noch abgefangen werden ############################################
    50. End Sub


    wie läßt sich Dein Konstrukt da einflechten? ich muß dazu sagen das der Pfad und der Filename erst im darauf folgenden Fenster zur Anzeige gebracht werden sollen. (siehe angehängtes Bild)

    Grüße
    Bilder
    • Auswertung Frequenzbereich (online).jpg

      118,22 kB, 764×379, 97 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „varo.biker“ ()

    Ganz anders.

    VB.NET-Quellcode

    1. Dim lines() As String
    2. Using ofd As New OpenFileDialog
    3. ' ...
    4. lines = System.IO.File.ReadAllLines(ofd.FileName)
    5. End Using
    6. ' ofd gibt es nun nicht mehr
    7. For Each line As String in lines
    8. ' Dateiinhalt zeilenweise abarbeiten
    9. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ausnahmsweise.
    Es ist noch nicht alles perfekt!
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub rbut_hauptm_freq_bereiche_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbut_hauptm_freq_bereiche_offline.CheckedChanged
    2. If rbut_hauptm_freq_bereiche_offline.Checked = True Then
    3. Dim AktFileName As String = ""
    4. Using ofd As New OpenFileDialog
    5. ofd.InitialDirectory = "C:\Users\...\"
    6. ofd.Filter = "csv-Datei (*.csv)|*.csv|" & " Alle Dateien (*.*)|*.*"
    7. ofd.Title = "Datei zum Öffnen auswählen"
    8. If ofd.ShowDialog() <> DialogResult.OK Then
    9. Return
    10. End If
    11. AktFileName = ofd.FileName
    12. End Using
    13. Dim str_zeile As String
    14. Dim int_zeile As Integer = 1 'Zähler für Schleife
    15. Dim lst_kopfdaten As New List(Of String) ' Definition der Liste mit Kopfdaten
    16. Dim lst_messdaten As New List(Of Double()) ' Liste mit Messdaten (mit Double-Array Werten)
    17. Dim lst_frequenzen As New List(Of Double) ' Liste der Frequenzen
    18. Using sr As System.IO.StreamReader = System.IO.File.OpenText(AktFileName)
    19. ' Datei-Inhalt als getrennte Listen in den Speicher laden
    20. ' -------------------------------------------
    21. Do While sr.Peek() > -1
    22. str_zeile = sr.ReadLine()
    23. If int_zeile < 35 Then ' Einlesen der Kopfdaten (bis Zeile 34)
    24. lst_kopfdaten.Add(str_zeile)
    25. ' Einlesen der Messdaten (ab Zeile 35)
    26. Else
    27. ' Aufsplitten der Zeile mit Messdaten (Trenner = ;)
    28. Dim str_temp_messdaten() As String = Split(str_zeile, ";")
    29. ' Extrahieren der Messwerte und zuweisen zu den entspechenden Positionen
    30. Dim dbl_freq As Double = CDbl(str_temp_messdaten(0))
    31. Dim dbl_dbm_min As Double = CDbl(str_temp_messdaten(1))
    32. Dim dbl_dmb_max As Double = CDbl(str_temp_messdaten(2))
    33. ' Zusammenstellen der Messwerte und zur Liste lst_messdaten hinzufuegen
    34. Dim dbl_messdaten As Double() = {dbl_freq, dbl_dbm_min, dbl_dmb_max}
    35. lst_messdaten.Add(dbl_messdaten)
    36. ' Frequenz zu Double-Array der Frequenzen hinzufuegen fuer Eingabepruefung
    37. lst_frequenzen.Add(dbl_freq)
    38. End If
    39. ' Zeilen-Zaehler erhoehen
    40. int_zeile += 1
    41. Loop
    42. End Using
    43. dbl_frq_min = lst_frequenzen(0).ToString()
    44. dbl_frq_max = lst_frequenzen(lst_frequenzen.Count - 1).ToString()
    45. Else
    46. MessageBox.Show("Abbruch")
    47. End If
    48. ' #### aufrufen des Fensters "Frequenzeingabe zur Festlegung des Auswertebereiches der Meßdatendatei ####
    49. frm_freq_bereiche_offline.Show() ' beim klicken des Button "Frequenzeingabe" wird das Fenster "Frequenzeingabe" aufgerufen
    50. Me.Enabled = False ' das Fenster "Hauptmenü" wird deaktiviert
    51. rbut_hauptm_freq_bereiche_offline.Checked = False
    52. '##################Fehler leerer Pfad bei drücken Abbruch - muß noch abgefangen werden ############################################
    53. End Sub


    Edit by Manschula: genaue Pfadangaben aus datenschutzrechtlichen Gründen gelöscht
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    Vielen Vielen Dank, das mit dem Using kannte ich noch nicht - klar nach den wenigen Tagen die ich mich mit VB beschäftige.

    Wie stelle ich das jetzt noch an, dass, wenn der Grundpfad auf c:\ steht,
    der User zu seinem Pfad wechselt (nehmen wir mal an "d:\Messdaten\Messung-2011-01-12\")
    das dieser Pfad als aktuell gesetzt wird
    (weil in diesem Pfad liegen noch mehr Messdateien liegen, die nacheinander von der selben Routine ausgewertet müssen),

    dieser auch in meinem Fenster angezeigt werden kann natürlich neben dem Namen der aktuell auszuwertenden Datei


    PS: ist es möglich das Du die Pfadangabe im Beispiel löschst!!!!!?????!!!!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „varo.biker“ ()