Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateipath wird bei der Speicherung nicht erkannt (https://www.delphipraxis.net/149847-dateipath-wird-bei-der-speicherung-nicht-erkannt.html)

Mariaki 31. Mär 2010 21:40


Dateipath wird bei der Speicherung nicht erkannt
 
Hi,
ich wollte die Einstellungen meines Programms speichern.
Dazu macht ich dies:
Delphi-Quellcode:
...

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;
Nun erhalte ich aber bei
"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

Jens Hartmann 31. Mär 2010 22:18

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

Mariaki 31. Mär 2010 22:27

Re: Dateipath wird bei der Speicherung nicht erkannt
 
Ist doch:
Delphi-Quellcode:
Var
  f : file of REinst;

Jens Hartmann 31. Mär 2010 22:38

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:
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.
Irgendwas stört in an folgendem Teil....

Code:
\MariakiDvlpmnt\Wecker\
Gruß Jens

Mariaki 31. Mär 2010 22:46

Re: Dateipath wird bei der Speicherung nicht erkannt
 
Ah.. wie doof.. der Ordner hat nicht existiert, und dann geht´s nicht..^^
ty

Jens Hartmann 1. Apr 2010 08:14

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:
var Dir : string;

Dir := 'MeinOrdner\MeinUnterordner';

if NOT DirectoryExists(Dir) then
  ForceDirectories(Dir);
Prüfen ob ein Ordner existiert kannst du mit...
Delphi-Quellcode:
DirectoryExists(Ordnername);
Einen neuen Ordner anlegen mit...
Delphi-Quellcode:
CreateDir(Ordnername);
Oder wie im Beispiel mit der Funktion
Delphi-Quellcode:
ForceDirectories(Odnername);
Gruß Jens

DeddyH 1. Apr 2010 10:39

Re: Dateipath wird bei der Speicherung nicht erkannt
 
Wenn man MSDN-Library durchsuchenSHGetFolderPath benutzt, kann man in den Flags angeben, dass der Ordner ggf. erstellt werden soll (CSIDL_FLAG_CREATE).

Mariaki 1. Apr 2010 11:20

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