Ü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 26.959 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats Juni 2024 Microsys Kramer Mausrad im Formular abschalten (Access) Deaktiviert das Mausrad in Access-Formularen. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |