Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OPEN Befehl mit String funktioniert nicht!

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Qwizard



Anmeldungsdatum: 10.02.2014
Beiträge: 3

BeitragVerfasst am: 13.02.2014, 01:03    Titel: OPEN Befehl mit String funktioniert nicht! Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 13.02.2014, 01:57    Titel: Antworten mit Zitat

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
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 13.02.2014, 08:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 13.02.2014, 10:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 13.02.2014, 12:39    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz