| |
VB.NET - Ein- und UmsteigerFilename 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. | |
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 | |
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. | |
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
| |
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"}) | |
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.
| |
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
| |
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.
| |
| 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 |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|