 |
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 |
roteo
Anmeldungsdatum: 31.07.2014 Beiträge: 15
|
Verfasst am: 08.08.2014, 09:28 Titel: Datensätze unterschiedlich |
|
|
Hallo zusammen,
ich habe eine kleine Dateiverwaltung geschrieben, die zu Beginn alle Sätze in einen Array einliest und dann bearbeitet. Das Programm läuft auch gut.
Alle Dateien, die nötig sind, liegen in demselben Ordner. Rufe ich die IDE auf und starte das Programm von dort, liefert es aber andere Ergebnisse als wenn ich die EXE aufrufe. Es liegen dann unterschiedliche Datensätze und auch unterschiedliche viele Datensätze vor.
Wie geht das denn? Speichert die Exe zusätzlich in einem anderen Ordner ab? Das Programm enthält eine Funktion, die eine CSV zu erzeugt. Auch da habe ich unterschiedliche Ergebnisse.
Ich habe im Programm keine Pfade angegeben. Da solle doch alles im aktuellen Ordner landen, oder?
Kann mir das bitte mal jemand erklären? Ich danke euch.
Gruß, Roteo |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 08.08.2014, 13:25 Titel: |
|
|
Du müsstest auf jeden Fall sicherstellen, dass der Ausführungspfad gleich dem Dateipfad ist. Wie das die IDE handhabt, kann ich nicht sagen (eine gute IDE sollte den Pfad eigentlich korrekt setzen), und auch beim Direktstart der exe können manchmal lustige Dinge passieren, z. B. bei der Verwendung von Verknüpfungen, aber auch Programme, die direkt auf dem Desktop liegen, werden wohl nicht in jeder Windows-Version korrekt behandelt. Mein Linux-PCManFM händelt einen Direktstart auch immer mit dem falschen Dateipfad, keine Ahnung wieso.
Als Schnelllösung könntest du mal probieren, ob es hilft, ganz am Anfang des Programms folgende Zeile einzufügen:
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
roteo
Anmeldungsdatum: 31.07.2014 Beiträge: 15
|
Verfasst am: 08.08.2014, 21:06 Titel: |
|
|
Hallo nemored,
vielen Dank erst einmal für deine Antwort. Ich werde das mal probieren. Das müsste dann aber heißen, dass irgendwo auf meinem Rechner noch eine solche Datei herumgeistert. Ich werde mal suchen... Vielleicht bringt mich das auch etwas weiter.
Grüße, Roteo |
|
Nach oben |
|
 |
roteo
Anmeldungsdatum: 31.07.2014 Beiträge: 15
|
Verfasst am: 10.08.2014, 10:05 Titel: |
|
|
Hallo nemored,
leider hat das nicht den gewünschten Erfolg gehabt. Obwohl ich nur eine Datei finden kann, habe ich dennoch unterschiedliche Inhalte und unterschiedliche Datensatzanzahl.
Gruß, Roteo |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 10.08.2014, 12:20 Titel: Besser immer vollständigen Pfad bei OPEN verwenden |
|
|
Hallo,
anstelle mit CHDIR bei jeder Dateioperation zunächst das Arbeitsverzeichnis zu wechseln, würde ich direkt auf absolute (nicht fest codierte!) Pfade für OPEN setzen.
Sinnvoll wäre es beispielsweise, einmal irgendwo am Anfang des Programms eine "Konstante" aufzunehmen:
Code: | #define Speicherdatei EXEPATH+"/array.csv" |
(Das ist keine Konstante im engeren Sinn (CONST), aber erfüllt den gleichen Zweck.)
Dann kannst du überall im Programm - egal, in welcher SUB oder FUNCTION - schreiben:
Code: | OPEN Speicherdatei FOR INPUT AS #1 |
oder
Code: | OPEN Speicherdatei FOR OUTPUT AS #1 |
Und du kannst sicher sein, dass die Datei immer an der gleichen Stelle gesucht / geschrieben wird, nämlich automatisch im gleichen Verzeichnis, wo die Programm-EXE liegt.
Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt.
Wenn man sicherstellen möchte, dass das Programm auch ohne solche Maßnahmen auf einem modernen System läuft, sollte man als Speicherort für solche Dateien einen Ordner wählen, den auch ein normaler User beschreiben darf. Zum Beispiel:
Code: | PRINT "Verzeichnis fuer Anwendungsdaten dieses Users:"
PRINT ENVIRON("APPDATA")
GETKEY: END |
Das könnte man mit der Pfadkonstante (s.o.) kombinieren:
Code: | #define Speicherdatei ENVIRON("APPDATA")+"/array.csv" |
Folgendes solltest du aber nicht machen:
Code: | OPEN "C:\MeinProgramm\datei.csv" FOR INPUT AS #1 |
Dann wäre dein Programm nur lauffähig, wenn es der User in exakt dieses Verzeichnis direkt unterhalb von C legt. In allen anderen Verzeichnissen wäre es nicht funktionsfähig. Das wäre eine ziemlich schlechte Lösung. Von daher sollte man immer Platzhalter wie EXEPATH oder ENVIRON("APPDATA") benutzen.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
roteo
Anmeldungsdatum: 31.07.2014 Beiträge: 15
|
Verfasst am: 11.08.2014, 17:13 Titel: |
|
|
Hallo Sebastian,
vielen Dank für deinen Tipp. Das kingt sehr logisch und ich werde es ausprobieren und melde mich dann wieder.
Gruß, Roteo |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 11.08.2014, 22:22 Titel: Re: Besser immer vollständigen Pfad bei OPEN verwenden |
|
|
Sebastian hat Folgendes geschrieben: | Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt. |
Gilt allerdings auch schon für die älteren Windows-Versionen, da auch dort das Ziel immer sein muss, die Anwendung ohne erhöhte Berechtigungen verwenden zu können. Am besten noch passenden Ordner innerhalb vom %APPDATA% anlegen. Bei Linux auf $HOME zurückgreifen.
Unter
http://msdn.microsoft.com/en-us/library/windows/apps/hh465094.aspx
gibt es von Microsoft sogar offizielle Richtlinien für Windows-Anwendungen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 12.08.2014, 01:07 Titel: Re: Besser immer vollständigen Pfad bei OPEN verwenden |
|
|
Sebastian hat Folgendes geschrieben: | Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt. | Ergänzend dazu: wenn ein Programm in diese Verzeichnisse ohne die nötigen Rechte versucht zu schreiben wird dies nicht fehlschlagen, da automatisch ein Kompatibilitätsmechanismus greift. Windows Vista/7 (keine Ahnung ob auch win8 ) virtualisiert die Dateizugriffe und leitet sie in den "VirtualStore" um (in den lokalen Anwendungsdaten). Bei einem neuen Programm sollte man jedoch selbstverständlich darauf achten - wie von Sebastian erklärt - nicht in diese Ordner zu schreiben. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
roteo
Anmeldungsdatum: 31.07.2014 Beiträge: 15
|
Verfasst am: 12.08.2014, 14:08 Titel: |
|
|
Das alles ist logisch und sinnvoll. Jetzt muss ich nur herausfinden, wo die andere Datei sich befindet. Schließlich habe ich unterschiedliche Datensätze. Es muss also noch eine Datei vorhanden sein.
Gruß, Roteo |
|
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.
|
|