vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Filename enthält &vbLF , aber warum ? 
Autor: lastyle
Datum: 19.11.14 19:08

Ich parse einen Dateiordner um in einer Listbox Dateinamen abzulegen. Jetzt möchte ich aus der Listbox die Dateinamen an einen Process weitergeben und die dann weiterverarbeiten. Ich muss den Dateinamen in anführungszeichen setzen um eventuelle Ordner mit Leerzeichen abzufangen daher gehe ich folgendermassen vor.

Dim image As String

For i = 0 To 0 REM später ändern nach ListBox1.Items.Count - 1
image = ""
image &= ListBox1.Items(i)
TextBox1.Text &= Chr(34) & image & Chr(34)
TextBox2.Text &= "/k scan.exe " & image & " -dir > " & Chr(34) & Application.StartupPath & "\list" & Chr(34)
System.Diagnostics.Process.Start("cmd", TextBox2.Text)

Next

Nur wenn ich so den dateinamen aus der Listbox auslese kommt als string
" & vbLf & "" & vbLf & "" & vbLf & "" & vbLf & "" & vbLf & " plus Dateiname raus und der Process wird nicht richtig gestartet.

Ich habe auch schon Listbox1.Items(i).ToString versucht. Immer noch falsch.

Schreibe ich direkt einen Dateinamen in image funktioniert es einwandfrei, also muss es am auslesen der Listbox lesen, nur wie mache ich es richtig ? Wie bekomme ich die vbLF weg ?


Danke im vorraus

Beitrag wurde zuletzt am 19.11.14 um 19:08:59 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: effeff
Datum: 19.11.14 19:49

Gegenfrage: Wie sind die Dateinamen denn in die ListBox hinein gekommen?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: lastyle
Datum: 19.11.14 20:01

Code dazu..

Private Function findd64()
Label1.Text = ""
Label2.Text = ""
Label3.Text = ""

For Each foundFile As String In My.Computer.FileSystem.GetFiles(TextBox1.Text, Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories, "*.d*")
If Microsoft.VisualBasic.Right(foundFile, 3) = "d64" Then
ListBox1.Items.Add(foundFile)
End If
If Microsoft.VisualBasic.Right(foundFile, 3) = "d71" Then
ListBox1.Items.Add(foundFile)
End If
If Microsoft.VisualBasic.Right(foundFile, 3) = "d81" Then
ListBox1.Items.Add(foundFile)
End If
Next

Return Nothing
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: Manfred X
Datum: 19.11.14 21:40

Das ist vermutlich eine Folge Deiner Programmierweise.
Du greifst innerhalb einer Routine direkt auf Control-Eigenschaften zu.
Z.B. könnten irgendwelche Ereignisverarbeitungs-Routinen,
die "unbeabsichtigt" ausgelöst werden, den Inhalt der Items ändern.

Probier mal so etwas (lokale Variable, dann Datenbindung)....
Private Function GetFiles(ByVal direc As String, _
    ByVal searchpattern() As String) As List(Of String)
 
    Dim filenames As New List(Of String)
 
    For Each filename As String In IO.Directory.GetFiles(direc, "*.*")
       Dim ext As String = IO.Path.GetExtension(filename).ToLower
 
       If searchpattern.Contains(ext) Then filenames.Add(filename)
    Next filename
 
    Return filenames
End Function


Beitrag wurde zuletzt am 19.11.14 um 21:42:40 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: lastyle
Datum: 19.11.14 22:37

Danke für den Input Manfred, aber

Wenn ich das jetzt mit

Getfiles ("c:\testdir","*.d64")

aufrufe kommt mir aber

"value of string cannot be converted to 1 dimensional array of string"

beim kompilieren, und einen New String kann ich nicht deklarieren in der Function.

Sollte doch aber eigentlich VS2010 kompatibel sein. Oder denke ich wieder zu sehr Visual Basic 6 mässig
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: Manfred X
Datum: 19.11.14 22:47

Vermutlich so ... falls es bei der Auswahl um Datei-Erweiterungen handelt
listbox1.DataSource = GetFiles("C:\daten", {".d64", ".d71", ".d81"})
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: lastyle
Datum: 19.11.14 23:44

Hat genau den gleichen effekt wie meine vorherige Suchroutine. wieder die vblf mit drin.

Ich hab es jetzt, damit es funktioniert einmal "dreckig" gelöst mit

image = Strings.Right(ListBox1.Items(i).ToString, (Len(ListBox1.Items(i).ToString) - 6))

damit schneidet er mit die vblf raus. Aber richtig ist das ja nicht wirklich und ich möchte schon gerne wissen wie es richtig wäre.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: effeff
Datum: 20.11.14 11:46

Auffällig ist auf jeden Fall, dass Du die Textboxen erweiterst, aber nicht den Inhalt komplett neu schreibst:

TextBox1.Text &= Chr(34) & image & Chr(34)
TextBox2.Text &= "/k
Richtig wäre:

TextBox1.Text = Chr(34) & image & Chr(34)
TextBox2.Text = "/k
Trotz allem bekomme ich es nicht hin, das LineFeed mit angezeigt zu bekommen...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: ModeratorDaveS (Moderator)
Datum: 20.11.14 11:47

Dein ursprünglicher Code funktioniert sozusagen richtig bei mir, mindestens das erste Mal durch. Da du &= verwendest werden weitere Strings in der TextBox verkettet.
Public Class Form1
    Private Function findd64()
          For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
            "C:\Users\Admin\Test", _
            Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories, _
            "*.*")
            ListBox1.Items.Add(foundFile)
        Next
        Return Nothing
    End Function
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        findd64()
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        Dim image As String
        For i = 0 To ListBox1.Items.Count - 1
            image = ""
            image &= ListBox1.Items(i)
            TextBox1.Text &= Chr(34) & image & Chr(34)
            TextBox2.Text &= "/k scan.exe " & image & " -dir > " & Chr(34) & _
              Application.StartupPath & "\list" & Chr(34)
            Debug.WriteLine(TextBox2.Text)
 
        Next
    End Sub
End Class
Ergebnis
/k scan.exe C:\Users\Admin\Test\Data\fid2.csv -dir > _
  "c:\users\admin\documents\visual studio" & _
  "2012\Projects\vyperStuff\vyperStuff\bin\Debug\list"
 
/k scan.exe C:\Users\Admin\Test\Data\fid2.csv -dir > _
  "c:\users\admin\documents\visual studio" & _
  "2012\Projects\vyperStuff\vyperStuff\bin\Debug\list"/k scan.exe _
  C:\Users\Admin\Test\Databases\Adressendat.mdf -dir > _
  "c:\users\admin\documents\visual studio" & _
  "2012\Projects\vyperStuff\vyperStuff\bin\Debug\list"

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: lastyle
Datum: 23.11.14 12:59

Update,

die "dreckig" Lösung funktionierte nur in meinem Testverzeichnis, sobald ich in einem anderen Verzeichnis nach Dateien gesucht habe waren mehr oder weniger Linefeeds drin. Es muss also mit der anzahl der Unterverzeichnisse mehr oder weniger linefeeds dazu addiert werden, warum auch immer.

Gänzlich ausgemerzt habe ich es nun mit

Dim newimage As String = image.Replace(vbCr, "").Replace(vbLf, "")

der String newimage enthält den Dateinamenn ohne Linefeeds und Carriage Return
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filename enthält &vbLF , aber warum ? 
Autor: Manfred X
Datum: 23.11.14 14:43

Dein Problem ist leider nicht wirklich gut zu lösen.
Im Net-Framework gilt nämlich: Wenn Cr (13) oder Lf (10) in eine
Zeichenfolge eingefügt wird, ---- ... steht Cr bzw. Lf danach auch
drin. Das gilt auf für Zeichenfolgen in Listbox-Items.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel