Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi assignfile: standardverzeichnis (https://www.delphipraxis.net/84420-assignfile-standardverzeichnis.html)

benicz 16. Jan 2007 18:17


assignfile: standardverzeichnis
 
hallöchen!

bevor mir jetzt noch mehr graue haare wachsen frage ich mal das liebe forum:

wenn ich bei assignfile im zweiten parameter kein verzeichnis angebe sondern nur den dateinamen 'base.dat', wo sucht delphi dann die datei bzw. schreibt es sie hin?!

ich habe schon in diversen projekteinstellungen gesucht, aber nix gefunden...

ich gehe mal davon aus, dass es das verzeichnis ist, in dem auch die .exe des programms liegt?!

in leserichtung würde das stimmen, aber wenn ich aine datei so schreibe, landet die woanders :-(


es muss doch eine stelle geben, wo man das einstellt, oder?


danke schonmal!

der bene

marabu 16. Jan 2007 18:22

Re: assignfile: standardverzeichnis
 
Hallo,

ohne eine absolute Pfadangabe werden deine Dateinamen in Bezug zum aktuellen Arbeitsverzeichnis (current working directory) gesetzt. Einstellen kannst du das über eine Shell-Verknüpfung oder im Programm über ChDir() oder auch einen der Standard-Dialoge (OpenDialog, SaveDialog). Ermitteln kannst du das cwd über GetDir(0, dir).

Grüße vom marabu

benicz 16. Jan 2007 18:30

Re: assignfile: standardverzeichnis
 
wow, danke für die schnelle antwort!

dann lag ich ja also gar nicht soo falsch.

aber wie kann es denn dann sein, dass er mir die datei beim speichern woanders hinschmeißt?!
:cry:

kann es sein, dass man das in der IDE voreinstellen kann, und ich die stelle/den menüpunkt nicht finde?

mkinzler 16. Jan 2007 18:34

Re: assignfile: standardverzeichnis
 
Nein, wie gesagt es wird das aktuelle Arbeitsverzeichnis genommen Am Besten du gibts dem AssignFile() einen Pfad mit

Christian Seehase 16. Jan 2007 18:35

Re: assignfile: standardverzeichnis
 
Moin benicz,

wie marabu schon geschrieben hat:
Es gibt einige Möglichkeiten, das Arbeitsverzeichnis zu verbiegen, so dass es grundsätzlich keine gute Idee ist auf Basis eben dieses Verzeichisses zu arbeiten.
Besser ist es in speziellen Windows-Verzeichnissen, oder relativ zum eigenen Programm (ExtractFilePath(paramstr(0)) die Daten zu speichern (letzteres sollte aber nur für Daten gelten die während des Programmlaufes nur gelesen werden, da ein normaler User im Programmverzeichnis keine Schreibrechte hat).

benicz 16. Jan 2007 18:41

Re: assignfile: standardverzeichnis
 
vielleicht sollte ich doch noch was mehr schreiben:

die datei, um die es geht ist dazu da, sich eine art "arbeitsverzeichnis" zu merken.
in ihr steht der ein weiterer dateiname der datei, die sozusagen eine basiskonfiguration des programmes beinhaltet.
die soll der user natürlich selbst ändern und abspeichern können, und sie soll nicht im programmverzeichnis sein müssen.

das hab ich für einen annehmbaren workaround gehalten...

mkinzler 16. Jan 2007 18:44

Re: assignfile: standardverzeichnis
 
Dann nimm ne Ini oder speichere in die Registry

himitsu 16. Jan 2007 18:45

Re: assignfile: standardverzeichnis
 
Zitat:

Zitat von mkinzler
Dann nimm ne Ini ...

die nutzen aber das selbe Standardverzeichnis :zwinker:

mkinzler 16. Jan 2007 18:47

Re: assignfile: standardverzeichnis
 
Zitat:

die nutzen aber das selbe Standardverzeichnis Zwinkern
U.a. ja.

benicz 16. Jan 2007 18:49

Re: assignfile: standardverzeichnis
 
um nochmal zur frage zu kommen:

beim einlesen der datei habe ich kein problem, ich wundere mich nur, dass er sie völlig wo anders hinschreibt, wenn ich ohne verzeichnisangabe abspeichere.
eigentlich sollte er doch dasselbe benutzen, oder?


es kann sein, dass ich in irgendeinem urschleimstatus des projektes mal versucht habe eine art arbeitsverzeichnis vorzugeben bei den projekteinstellungen.
aber ich habe im laufe der zeit ein neues projekt angefangen und neu aufgebaut, das kann eigentlich nicht übernommen worden sein...

Christian Seehase 16. Jan 2007 18:54

Re: assignfile: standardverzeichnis
 
Moin benicz,

um die Frage noch einmal zu beantworten: ;-)
Das Arbeitsverzeichnis kann sich während des Programmlaufes, und vor dem Start (durch den Eintrag des Verzeichnisses in einem Link) ändern, so dass Du also nicht davon ausgehen kannst die Datei an der erwarteten Stelle zu finden.

himitsu 16. Jan 2007 18:57

Re: assignfile: standardverzeichnis
 
sollte er auch :gruebel:

bist du sicher, daß nirgends (beim Lesen und Schreiben) ein Verzeichnis angegeben wird?


[add]
stimmt, oder es könnte so sein wie Christioan es sagt :angel:

benicz 16. Jan 2007 19:01

Re: assignfile: standardverzeichnis
 
nachtigall ick hör dir trappsen!

es ist also so, dass der pfad bei jeder angabe geändert wird und auch da "bleibt", ja?
daaaaaas is dann natürlich was anderes!

er macht also jedes mal, wenn ich ihm ein verzeichnis nene eine art chdir?

das wäre die lösung, glaub ich.

mkinzler 16. Jan 2007 19:03

Re: assignfile: standardverzeichnis
 
Du hast das mißverstanden, du sollst beim Öffen den bestimmten Pfad mitübergeben um sicherszustellen, daß er den richtigen Pfad hat.

benicz 16. Jan 2007 19:12

Re: assignfile: standardverzeichnis
 
wenn aber das verzeichnis nach programmstart das ist, in dem die .exe liegt, ist es ja das richtige.
ich weiß ja jetzt noch nicht, wo der user das ganze hininstalliert...

andere idee:
gibt getdir(0,bla) das (stamm-)verzeichnis zurück?
dann merk ich's mir halt für die laufzeit.
ich muss ja eventuell auch wieder was da reinschreiben...

mkinzler 16. Jan 2007 19:19

Re: assignfile: standardverzeichnis
 
Du kannst aber nicht sicher sein, daß es das Verzeichnis der Exe ist!!!! Deshalb Verzeichnis mit angeben!
Delphi-Quellcode:
ExtractFilePath( Application.ExeName)+"<datei.ext>"

benicz 16. Jan 2007 19:28

Re: assignfile: standardverzeichnis
 
aber beim programmstart ist es das doch, oder jetzt doch nicht??
ich habe es jetzt so gemacht, dass ich, bevor irgendwas passiert, mit getdir dieses verzeichnis "sichere" und den wert wieder benutze, wenn ich diese ini-datei schreibe.
und es klappt...

Zitat:

Zitat von mkinzler
Du kannst aber nicht sicher sein, daß es das Verzeichnis der Exe ist!!!! Deshalb Verzeichnis mit angeben!
Delphi-Quellcode:
ExtractFilePath( Application.ExeName)+"<datei.ext>&quot;

genau dieses verzeichnis kenne ich ja nicht, da kann ich also auch nix extracten...

welche (evtl. elegantere) lösung gäbe es denn noch, mein "programmverzeichnis" rauszukriegen?

mkinzler 16. Jan 2007 19:32

Re: assignfile: standardverzeichnis
 
Zitat:

Zitat von benicz

welche (evtl. elegantere) lösung gäbe es denn noch, mein "programmverzeichnis" rauszukriegen?

Ich habe so das Gefühl du scheinst unsere Beiträge nicht zu Lesen!: Christian hat es in #5 schon erwähnt, ich in meinem letzten Beitrag also alles Lesen.

benicz 16. Jan 2007 19:38

Re: assignfile: standardverzeichnis
 
der schein trügt aber ziemlich! :gruebel:

aber ich habe jetzt verstanden, dass "application.exename" nicht nur platzhalter war...

manchmal werden die knoten im hirn aber auch verdammt groß! :wall:

ich hab's jetzt und danke allen für die superschnellen und geduldigen hilfen!
schönen abend noch

der bene

mkinzler 16. Jan 2007 19:40

Re: assignfile: standardverzeichnis
 
Zitat:

aber ich habe jetzt verstanden, dass "application.exename" nicht nur platzhalter war...
Dann wäre er in <> eingeschlossen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz