Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kann auf C:\ schreiben aber nicht auf APPDATA. (https://www.delphipraxis.net/92251-kann-auf-c-%5C-schreiben-aber-nicht-auf-appdata.html)

EDatabaseError 16. Mai 2007 23:58


Kann auf C:\ schreiben aber nicht auf APPDATA.
 
N'abend...

Da man unter Vista ja die Ini's & Co. unter Appdata speichern soll wollte ich eine Anwendung von mir mal Vistaready machen.

Unter XP getestet:

Wenn ich in die INI unter APPDATA+\firmenname\progname\ speichern will bekomm ich ne schöne Exception das dies nicht möglich seie. Dafür kann ich die INI aber ohne Probleme unter C:\ ablegen.

:mrgreen: Und das schlimmste ist ich hab Adminrechte

mfg

Catbytes 17. Mai 2007 00:01

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Welches AppData meinst Du?

AllUsers oder Benutzerverzeichnis?

Siehe auch Diesen Thread.

EDatabaseError 17. Mai 2007 00:07

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Ich mein dieses Appdata...

Start-Ausführen-CMD-SET und dann APPDATA

also kurz: Die Environmentvaribale APPDATA.

mfg

EDatabaseError 17. Mai 2007 15:43

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
ein ganz dezentes *push*

:angel:

CCRDude 17. Mai 2007 15:50

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Nimm nicht die Environmentvariable, sondern besorge Dir den Pfad richtig über die API. Catbytes hat dazu ja schon etwas verlinkt.

Ich hatte das woanders schonmal gepostet, hier einfach nochmal ein grober Codeschnipsel:

Delphi-Quellcode:
function SpecialDirectory(const iID: Integer): string;
// Needs: ShlObj on Delphi, WinExt on FPC
var aPath : array[0..MAX_PATH] of Char;
    pilTemp: PItemIDList;
begin
   try
      if SHGetSpecialFolderLocation(0, iID, pilTemp)=S_OK then begin
         if SHGetPathFromIDList(pilTemp, aPath) then begin
            Result := string(aPath);
         end else Result := '';
         CoTaskMemFree(pilTemp);
      end else Result := '';
   except
      Result := '';
   end;
end;

var sPath: string;
begin
   sPath := SpecialDirectory(CSIDL_APPPDATA);
end;

EDatabaseError 17. Mai 2007 16:02

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Bei deiner Funktion wird auch noch die ActiveX benötigt und er kennt CSIDL_APPPDATA nicht.

Aber der Pfad: C:\Dokumente und Einstellungen\Tobias Hocke\Anwendungsdaten ist doch der korrekte Pfad (dieser Steht auch so in den Environments)

Mfg
Tobi

DGL-luke 17. Mai 2007 16:05

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Du könntest dir den Pfad auch aus der Registry holen. Es gibt aber zwei Gefahren:

1. dass die variablen irgendwann einfach nicht mehr existieren
2. dass Windows das ganze umleitet, und du damit nicht nur eine Fehlermeldung bekommst, sondern sehr inkonsistentes Verhalten deiner Anwendung.

Also machs so. Und die KOnstante kannst du dir so holen: http://www.google.com/codesearch?q=C...nG=Code+suchen

EDatabaseError 17. Mai 2007 16:12

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
APPDATA aus Registry : C:\Dokumente und Einstellungen\Tobias Hocke\Anwendungsdaten
APPDATA aus Environments : C:\Dokumente und Einstellungen\Tobias Hocke\Anwendungsdaten

Und dann noch diesen Pfad dazu : \Tobias Hocke Software\produktname\

Daraus folgt dieser Pfad in den ich nicht schreiben kann:
C:\Dokumente und Einstellungen\Tobias Hocke\Anwendungsdaten\Tobias Hocke Software\produktname\

:-(

Ich werde nun noch die Environment aus der API auslesen und vergleichen...

//EDIT:
Und dieser Pfad ist auch gleich

CCRDude 17. Mai 2007 18:28

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
Hmmm... wie wärs dann mal mit dem genauen Text der "schönen Exception"?
Außerdem: gibts den Ordner schon? Sonst ForceDirectories.

EDatabaseError 17. Mai 2007 18:55

Re: Kann auf C:\ schreiben aber nicht auf APPDATA.
 
:wall: Man sollte nie versuchen in ein Verzeichnis zu schreiben welches noch nicht da ist. Die 2 Unterordner haben gefehlt.
Das kommt davon wenn man nach 23 Uhr etwas anfängt :drunken:

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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