Ü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? 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: Dieser Tipp wurde bereits 25.809 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
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... Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. Neu! sevEingabe 3.0 ![]() Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
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. |