|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Qwizard
Anmeldungsdatum: 10.02.2014 Beiträge: 3
|
Verfasst am: 13.02.2014, 02:03 Titel: OPEN Befehl mit String funktioniert nicht! |
|
|
Wenn ich folgenden Code benutz funktionierst's noch:
Code: | OPEN "c:\users\user\desktop\Text.txt" FOR OUTPUT AS #1 |
aber wenn ich dann einen String benutze...
Code: | INPUT "Dateipfad: ", Tx$
OPEN Tx$ FOR OUTPUT AS #1 |
dann ist komischerweise immer der Pfad falsch.
Geschweige denn bei dem:
Code: | INPUT "Dateipfad: ",Tx$
OPEN Tx$ + "\text.txt" FOR OUTPUT AS #1 |
Warum? Was mach ich falsch? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 13.02.2014, 02:57 Titel: |
|
|
Hallo,
woran machst du das fest, dass der Dateipfad dann immer falsch ist? Erscheint eine Fehlermeldung? Wird ein ERROR-Code geliefert? Wird die Datei nicht neu geschrieben? Oder an einem anderen als dem erwünschten Ort?
Die angegebenen Code-Fragmente sind zwar nicht vollständig, aber in QB alle OK.
Könnte das Problem evtl. mit Leerzeichen, Umlauten oder überlangen Pfaden zu tun haben? QB kann mit langen Dateinamen, die nicht dem 8.3-System gehorchen, standardmäßig nicht umgehen. Es gibt zwar gewisse Möglichkeiten, über Interrupt-Aufrufe die Windows-Long-Filenames anzusprechen, aber nicht über die Bordmittel. Auch Leerzeichen und Umlaute sind bei Dateipfaden in DOS-Programmen problematisch.
Übrigens: Statt Variablen aus dem Nichts auftauchen zu lassen (implizite Deklaration), sollte man sie vor der Verwendung deklarieren (explizite ~). Dann lassen sich viele alte Programme auch mit FreeBASIC im Standardmodus für Windows kompilieren.
Code: | Dim Dateipfad As String
Input "Wo soll die Datei liegen? ", Dateipfad
If (Dateipfad = "") Then End
Open Dateipfad For Output As #1
...
Close #1 |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.02.2014, 09:58 Titel: |
|
|
Thema noch einmal passend verschoben.
@Qwizard: Mach bitte einmal Angaben, was für eine Entwicklungsumgebung (z.B. QuickBasic 4.5 oder FreeBasic Compiler Version X und FbEdit Version Y) + Betriebssystemplattform (z.B. Windows 7 Home Premium 64 Bit Service Pack 1) Du verwendest.
Nur zur Info: QB sollte definitiv nur noch für MS-DOS-Anwendungen verwendet werden, für alles unter Windows ab 95 an aufwärts besser mit FreeBasic arbeiten, welches vollvertige 32-Bit-Programme liefert und die langen Dateinamen auch ohne Wenn und Aber unterstützt.
Ganz nebenbei: Vermeide hart codierte Pfade wie "C:\Users\foo\Desktop", für so etwas hat Microsoft unter
http://msdn.microsoft.com/en-us/library/9x9e7edx%28v=vs.84%29.aspx
eine spezielle API (SpecialFolders) bereitgestellt, mit welcher sichergestellt wird, dass die Anwendung auch in zukünftigen Windows-Versionen läuft. Umgekehrt früher hiess dies "C:\Documents and Settings", "C:\Dokumente und Einstellungen" usw.
@Profis: Wäre übrigens ein schöner Anwendungsfall für "win32.bi". Siehe dazu
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762494%28v=vs.85%29.aspx
/edit: Test mit VBScript als Beispiel. Code selber:
Code: | ' Spezialordner ausgeben
Option Explicit
Dim aOrdner, oSh, i
aOrdner = Array("AllUsersDesktop", "AllUsersStartMenu", "AllUsersPrograms", "AllUsersStartup", _
"Desktop", "Favorites", "Fonts", "MyDocuments", "NetHood", "PrintHood", "Programs", "Recent", _
"SendTo", "StartMenu", "Startup", "Templates")
Set oSh = CreateObject("WScript.Shell")
For i = LBound(aOrdner) To UBound(aOrdner)
WScript.Echo aOrdner(i) & " = " & oSh.SpecialFolders(aOrdner(i))
Next
Set oSh = Nothing |
Beispiele:
Vista Business x64 hat Folgendes geschrieben: | Microsoft (R) Windows Script Host, Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
AllUsersDesktop = C:\Users\Public\Desktop
AllUsersStartMenu = C:\ProgramData\Microsoft\Windows\Start Menu
AllUsersPrograms = C:\ProgramData\Microsoft\Windows\Start Menu\Programs
AllUsersStartup = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Desktop = C:\Users\andreas\Desktop
Favorites = C:\Users\andreas\Favorites
Fonts = C:\Windows\Fonts
MyDocuments = C:\Users\andreas\Documents
NetHood = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Network Shortcuts
PrintHood = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
Programs = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Start Menu\Program
s
Recent = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Recent
SendTo = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\SendTo
StartMenu = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Start Menu
Startup = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
\Startup
Templates = C:\Users\andreas\AppData\Roaming\Microsoft\Windows\Templates |
altes Windows 95 mit IE 5.5SP2 hat Folgendes geschrieben: | Microsoft (R) Windows Script Host, Version 5.1 für Windows
Copyright (C) Microsoft Corporation 1996-1999. Alle Rechte vorbehalten.
AllUsersDesktop =
AllUsersStartMenu =
AllUsersPrograms =
AllUsersStartup =
Desktop = C:\WINDOWS\DESKTOP
Favorites = C:\WINDOWS\Favoriten
Fonts = C:\WINDOWS\FONTS
MyDocuments = C:\Dokumente
NetHood = C:\WINDOWS\Netzwerkumgebung
PrintHood =
Programs = C:\WINDOWS\Startmenü\Programme
Recent = C:\WINDOWS\Recent
SendTo = C:\WINDOWS\SendTo
StartMenu = C:\WINDOWS\Startmenü
Startup = C:\WINDOWS\Startmenü\Programme\Autostart
Templates = C:\WINDOWS\ShellNew |
=> Wäre ein sinnvolles Beispiel für eine FB-Portierung! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 13.02.2014, 11:49 Titel: |
|
|
Der Vollständigkeit halber: FB kann vollständige 32/64-bit Programme erstellen (für 64-bit gibt es entsprechende Builds).
Es gibt auch keine "win32.bi", dafür eine "windows.bi".
Und hier ein kleines Beispiel zum Ermitteln der Ordner in FB. Es gibt sicher noch andere Wege.
Code: |
#Include once "win/shlobj.bi"
Dim As ZString*MAX_PATH path
Dim As Integer ordner(0 To ...) = { CSIDL_PERSONAL, CSIDL_STARTMENU, CSIDL_DESKTOPDIRECTORY }
For i As Integer = LBound(ordner) To UBound(ordner)
SHGetFolderPath(0, ordner(i), 0, 0, path)
Print path
path = ""
Next
Sleep
|
|
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.02.2014, 13:39 Titel: |
|
|
@MOD: Danke für das Beispiel. Daraus kurzerhand etwas selber gebaut:
http://beilagen.dreael.ch/QB/Spezialpfad.bas
=> Einem offiziellen Programm-Installer würde also nichts mehr im Weg stehen... ;-)
Beispiel ist natürlich nur rein illustrativ, d.h. verändert also nichts real am System. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|