Dateipath wird bei der Speicherung nicht erkannt
Hi,
ich wollte die Einstellungen meines Programms speichern. Dazu macht ich dies:
Delphi-Quellcode:
Nun erhalte ich aber bei
...
Type REinst = record Aktiv, Tray, Fenster, IndiB, WinStart :boolean; IndiS :String[255]; AutoUp :integer; end; ... implementation Var Einst :REinst; ... procedure TMainForm.BtnClick(Sender: TObject); Var f : file of REinst; Path : string; begin with Einst do begin //Daten in "Einst" speichern end; Path := GetSpecialFolder(CSIDL_APPDATA)+'\MariakiDvlpmnt\Wecker\Einst.dat'; AssignFile(f, Path); ReWrite(f); Write(f,Einst); CloseFile(f); end; "ReWrite(f)" die Fehlermeldung: "Ungültiger Dateiname - %s". Ich weiß nicht woran das liegen kann. Ich habe mir auch schon "Path" mittels "Showmessage" anzeigen lassen.. ist ganz normal ("C:\Users\Mariaki\AppData\Roaming\Tmp\Einst.da t") Ich hab auch schon versuch "Path" als PChar zu deklarieren.. genau das gleiche. Ich hoffe ihr könnt helfen. Gruß Mariaki |
Re: Dateipath wird bei der Speicherung nicht erkannt
Hallo,
ich bin mir nicht ganz sicher, aber müsste nicht in deinem Fall, "f"vom Type file oder Textfile sein... "f" ist bei Dir ja eine Record. Sorry, bin mir nicht sicher ob ich da richtig liege, aber Du kannst es ja mal prüfen... Gruß Jens |
Re: Dateipath wird bei der Speicherung nicht erkannt
Ist doch:
Delphi-Quellcode:
Var
f : file of REinst; |
Re: Dateipath wird bei der Speicherung nicht erkannt
Du hast recht.
Ich habe das ganze gerade mal bei mir nachgebaut. Es stimmt irgendewas mit deinem Dateinamen nicht. Mit folgender Funktion geht es bei mir.
Delphi-Quellcode:
Irgendwas stört in an folgendem Teil....
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShlObj, ShellAPI, ActiveX; Type REinst = record Aktiv, Tray, Fenster, IndiB, WinStart :boolean; IndiS :String[255]; AutoUp :integer; end; type TForm1 = class(TForm) btn: TButton; procedure btnClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} Var Einst :REinst; function GetSpecialFolder (aFolder: Integer): String; var pIdL: PItemIDList; Path: Array [0..Max_Path] of Char; Allocator: IMalloc; begin // ItemIdList für den Ordner holen SHGetSpecialFolderLocation (0, aFolder, pIdL); // ItemIdList in String umwandeln lassen SHGetPathFromIDList (pIDL, Path); // Speicher wieder freigeben if Succeeded (SHGetMalloc (Allocator)) then begin Allocator.Free (pIdL); {$IFDEF VER100} Allocator.Release; {$ENDIF} end; Result := Path; end; procedure TForm1.btnClick(Sender: TObject); Var f : file of REinst; Path : string; begin with Einst do begin //Daten in "Einst" speichern end; Path := GetSpecialFolder(CSIDL_APPDATA)+'\Einst.dat'; AssignFile(f, Path); ReWrite(f); Write(f,Einst); CloseFile(f); end; end.
Code:
Gruß Jens
\MariakiDvlpmnt\Wecker\
|
Re: Dateipath wird bei der Speicherung nicht erkannt
Ah.. wie doof.. der Ordner hat nicht existiert, und dann geht´s nicht..^^
ty |
Re: Dateipath wird bei der Speicherung nicht erkannt
Hallo Mariaki,
du solltest überprüfen, ob der Ordner existiert, und diesen ansonsten erstellen lassen...
Delphi-Quellcode:
Prüfen ob ein Ordner existiert kannst du mit...
var Dir : string;
Dir := 'MeinOrdner\MeinUnterordner'; if NOT DirectoryExists(Dir) then ForceDirectories(Dir);
Delphi-Quellcode:
Einen neuen Ordner anlegen mit...
DirectoryExists(Ordnername);
Delphi-Quellcode:
Oder wie im Beispiel mit der Funktion
CreateDir(Ordnername);
Delphi-Quellcode:
Gruß Jens
ForceDirectories(Odnername);
|
Re: Dateipath wird bei der Speicherung nicht erkannt
Wenn man SHGetFolderPath benutzt, kann man in den Flags angeben, dass der Ordner ggf. erstellt werden soll (CSIDL_FLAG_CREATE).
|
Re: Dateipath wird bei der Speicherung nicht erkannt
Jaja.. ich weiß wie das geht.. ich hab nur nicht daran gedacht..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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