Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB4, VB5, VB6 | 23.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 Otter | Bewertung: | Views: 26.906 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein 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)