AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Relativer Pfad & co.

Ein Thema von Super_Chemiker · begonnen am 26. Mai 2009 · letzter Beitrag vom 27. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Super_Chemiker

Registriert seit: 16. Nov 2008
111 Beiträge
 
Delphi 2009 Professional
 
#1

Relativer Pfad & co.

  Alt 26. Mai 2009, 16:10
Hallo, ich habe schon wieder eine Frage:

Wenn ich das Programm etwas abspeichern lassen will, dann stehe ich vor dem Rätsel, wie ich das mache.
Mein Ordnerbaum sieht ungefähr so aus:
Projektordner(der ist ja dann verschieden, daher das Problem)
--->Saves(hier will ich es abspeichern)

Meine Fragen also:
Gibt es eine Variable, für den Anwendungspfad?
Gibt es eine einfache Möglichkeit, etwas in den Documents Ordner zu speichern. (Wäre meine 2. Wahl, weil man es von dort nicht wegbekommt, wenn man den Anwendungsordner löscht...)

Warum das alles? Ich will eben, dass dieses Programm auf jedem PC läuft(zumindest auf denen mit vista oder XP )

Ich habe bereits gegooglet und co, aber nichts für mich gefunden...

Danke schonmal für eure Hilfe.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:15
Zitat:
Question Gibt es eine Variable, für den Anwendungspfad?
Was verstehst du unter dem Anwendungspfad
Hier im Forum suchenSpecial Folders
Special FoldersSpecial Folders
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:15
Den Anwendungspfad bekommst Du mitExtractFilePath(ParamStr(0)) , aber es ist u.U. keine gute Idee, dorthin zu speichern. Um den Anwendungsdatenpfad zu ermitteln, kannst Du mal die DP-Suche nach CSIDL_APPDATA bemühen, da sollten sich einige Lösungen finden lassen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Super_Chemiker

Registriert seit: 16. Nov 2008
111 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:20
Unter einem Anwendungspfad verstehe ich folgendes:
Der Ort, wo die Anwendung liegt(z.B.: C:\Programme\hier noch ein paar ordner\Codegear\ und so weiter bis \bds.exe)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#5

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:39
Genau. Unter ordentlichen Betriebssystemen (Unix, Linuxen, Windows ab Vista, XP eingeschränkt - nur bei Usern ohne Adminrechten) hat eine Anwendung in ihrem Anwendungsverzeichnis keine Rechte um dort irgendwas abzulegen. Das heisst Du solltest Dir lieber nochmal überlegen, für welchen Anwenderkreis diese Daten les- bzw. sogar schreibbar sein sollen und dann das richtige Verzeichnis dafür auswählen, dass Dir das Betriebssystem mit den SpecialFolders auch für die jeweilge Installation korrekt zurückliefert.

Edit: Documents (CSIDL_PERSONAL) wäre im übrigen nur dann richtig, wenn diese Daten nur für den aktuellen Benutzer zugänglich sein sollen. Ein anderer User hat dann seine eigenen Daten. Für alle Benutzer wäre dann CSIDL_COMMON_DOCUMENTS der richtige Ort.

Was das Entfernen angeht: Einfach in das Setup eine Uninstall-Routine einbauen die genau diese Orte auch aufräumt und gut ist.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:40
IIRC heißt die zugehörige Funktion SHGetFolder aus der Unit SHFolders. Schau Dir die mal an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:40
Ganz ganz dumme Idee dort was abspeichern zu wollen. Nur Administratoren können schreibend auf den Ordner zugreifen. Bedeutet Windowsuser ohne Administrator Rechte (= alle Vistabenutzer mit aktivierter UAC) können Deine Anwendung dann wahrscheinlich gar nicht oder nur sehr eingeschränkt nutzen. Entsprechend benutz lieber einen der dafür vorgesehenen Ordner (Public wenn für alle Nutzer sichtbar, Benutzerordner für die benutzerspezifischen Einstellungen).
Fridolin Walther
  Mit Zitat antworten Zitat
Super_Chemiker

Registriert seit: 16. Nov 2008
111 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:48
Ich habe jetzt den Special Folders Link von mkinzler genutzt und die Sachen eingebaut, bekomme aber dann folgende Exception: (Nachdem ich mit ForceDirectories den Pfad ersetllt habe)
Im Projekt -Hier der Projektname- ist eine Exception der Klasse EFCreateError mit der Meldung 'Datei "C:\Users\-Hier mein Benutzername am PC-\Documents\Saves\EineDatei.txt" kann nicht erstellt werden. Das System kann den angegebenen PFad nich finden' aufgetreten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 16:51
Zeig mal Deinen Code.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Super_Chemiker

Registriert seit: 16. Nov 2008
111 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Relativer Pfad & co.

  Alt 26. Mai 2009, 17:00
Delphi-Quellcode:
function TForm1.GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;
Der Teil für die GetSpecialFolder funktion

Delphi-Quellcode:
...
    Game := TStringlist.Create;
    try
      ForceDirectories(GetSpecialFolder(Handle, CSIDL_PERSONAL )+'/Saves');
      Game.LoadFromFile(GetSpecialFolder(Handle, CSIDL_PERSONAL )+'/Saves/'+NameF+'.txt');
...
Hier wird eine Datei geladen, falls sie vorhanden ist und der Pfad wird davor erstellt(wenn ich ForceDirectories vor das try schiebe änderts auch nichts)

Delphi-Quellcode:
...
Game.SaveToFile(GetSpecialFolder(Handle, CSIDL_PERSONAL )+'/Saves/'+NameF+'.txt');
...
Hier kommt dann der Fehler


Und natürlich setze ich Game nachher immer auf .Free
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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