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   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB4, VB5, VB623.04.02
Command$ und das leidige Problem mit Dateinamen

Ein Winzigkeit gilt es zu beachten - und schon gehört das leidige Problem der Vergangenheit an...

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  25.809 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10kein Beispielprojekt 

Über die Command$-Funktion lässt sich bekanntlich die Parameterliste abfragen, die beim Starten eines Programms mit angegeben wurden. Häufig kommt es vor, daß man auf diese Weise ein Programm startet, welches dann sofort die im Parameter angegebene Datei für die weiteren Programmaktionen verwenden soll.

Das ist alles auch kein Problem - der Code hierfür sieht dann ungefähr so aus:

' Bei Programmstart
Public Sub Main()
  ' Mainform laden
  Load frmMain
 
  ' Parameter vorhanden?
  If Command$ <> "" Then
    ' Annahme: Es wurde eine Datei angegeben, 
    ' die ausgelesen und in einer TextBox angezeigt
    ' werden soll
    Dim F As Integer
    Dim sInhalt As String
 
    F = FreeFIle    
    Open Command$ For Binary As #F
    sInhalt = Space$(Lof(F))
    Get #F, , sInhalt
    Close #F
 
    frmMain.txtEditor.Text = sInhalt
  End If
 
  ' Mainform anzeigen
  frmMain.Show
End Sub

Sie haben nun obigen Code in Ihrem Programm und das ganze funktioniert auch einwandfrei. Doch plötzlich - was passiert? Beim Starten Ihres Programms (natürlich in Verbindung mit einem Dateinamen als Parameter) erhalten Sie auf einmal die Fehlermeldung 52 - Datei oder Dateinummer ungültig.

Aber warum?
Bisher funktionierte doch alles zur vollsten Zufriedenheit - warum kommt es nun zu obigen Fehler?

Was tun Sie nun zuerst? Genau! Sie schauen nach, was die Funktion Command$ zurückgibt. Und das wäre (z.B.):

"c:\programme\gemeinsame dateien\was für ein text.txt"

Na ja, eigentlich alles korrekt - so meint man zumindest im ersten Augenblick. Kurze Prüfung: Jawohl, die Datei existiert auch im angegebenen Ordner. Warum also nur erscheint dieser ominöse Fehler?

Bei näherer Betrachtung fällt einem dann endlich folgendes auf: Der Dateiname steht in Anführungszeichen!

Warum? Weil der Dateiname (oder der Pfad) Leerzeichen enthält!

Also braucht man jetzt lediglich evtl. vorhandene Anführungszeichen ausfiltern - und schwups - schon funktioniert der Code und damit das Programm wieder.

' Bei Programmstart
Public Sub Main()
  ' Mainform laden
  Load frmMain
 
  ' Parameter vorhanden?
  If Command$ <> "" Then
    ' Annahme: Es wurde eine Datei angegeben, 
    ' die ausgelesen und in einer TextBox angezeigt
    ' werden soll
    Dim F As Integer
    Dim sInhalt As String
 
    ' Evtl. vorhandene Anführungszeichen entfernen
    Dim sFilename As String
    sFilename = Replace(Command$, Chr$(34), "")
 
    F = FreeFIle    
    Open sFilename For Binary As #F
    sInhalt = Space$(Lof(F))
    Get #F, , sInhalt
    Close #F
 
    frmMain.txtEditor.Text = sInhalt
  End If
 
  ' Mainform anzeigen
  frmMain.Show
End Sub

Die notwendigen Codeänderungen sind fett hevorgehoben. Zu beachten ist, daß es die Replace-Funktion erst ab VB6 gibt. Für alle VB4/5-Entwickler haben wir jedoch eine Alternative in unseren Tipps & Tricks Bereich parat:
 Blitzschnelle Replace-Funktion (auch für VB6)
 

Dieser Tipp wurde bereits 25.809 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 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