Autor Beitrag
moonraker
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 19.07.11 13:21 
Hallo Leute,

Hab ein Delphi 5 Programm zum warten.
Dieses speichert ein Projektfile als ini File mittels TInifile componente.
Nur die Endung ist anders.
Nun stellte das bis anhin kein Problem dar, auch nicht auf Windows 7 bzw Vista.
Jetzt hab ich einen W7 Rechner der mir unregelmässig verweigert das File zu erstellen (Create) oder upzudaten (TmemInifile.update).
Meldet entweder zuwenig Rechte- wenden sie sich an den admin , oder exceptuion unalbe to create.
Nun hab ich als der User aber vollzugriff auf den Ordner (das selbe File mit editor kann ich nach belkieben ändern, speichern usw)
Gespeichert wird auf dem Dokumentepfad in einem Unterordner der bei Installation angelegt wird.
Habt Ihr Tipps was da los sein könnte? Langsam gehen mir die Ideen aus.
Bin für alle Tipps dankbar.
acnut
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 172
Erhaltene Danke: 3

Windows 7, Windows Vista, Windows XP, Ubuntu, Kubuntu, Pardus
Delphi 2010 SV, Java Editor, VS 2010 SV
BeitragVerfasst: Di 19.07.11 13:29 
hab die gleichen probleme mit den ini-dateien auch gehabt und mir wurde folgendes empfohlen:

www.delphi-library.d...ewtopic.php?p=548600

_________________
Hey, die Sonne scheint, da werd ich mal in kurzen Hosen fernsehn…
moonraker Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 19.07.11 14:05 
hallo acnut,
nein diesmal ist es nicht das klassische Problem dass ich keien Rechte hab.
Zumindest sollte ich sie haben, da ich das File in die eigenen Dokumente schreib.
auch die Optionen oder anderen Inis sind dort wo sie hingehören (%APPDATA% usw...)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 19.07.11 14:19 
Du könntest einmal mit dem Process Monitor die Zugriffe loggen und dann schauen was dort passiert ist.

Relative Pfade hast du sicher nirgends mehr?
moonraker Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 19.07.11 15:33 
hallo,

nein, auf jeden fall nicht mehr in diesem bereich wo es mich ärgert.
hab mir auch die aktuellen pfade zur sicherheit anzeigen lassen.
Offline Dateien deaktiviern ändert ein wenig die Fehlerhäufigkeit wies scheint ??
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Di 19.07.11 15:35 
mach doch mal 'n Test mit AssignFile() und las dir das IOResult() zurückgeben.

Oder einfach mal Testen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
program Testme;

{$APPTYPE CONSOLE}

uses
  Windows,
  Inifiles,
  SysUtils,
  ShellAPI,
  ActiveX,
  ShlObj;

function GetSpecialFolder (CSIDL: Integer) : String;
var
  ItemIDList: PItemIDList;
  sFolderPath : String;
  iSystemFolder : Integer;
  pMalloc : IMalloc;
begin
  pMalloc := nil;
  sFolderPath := '';
  SHGetMalloc (pMalloc);
  if (pMalloc = nil)
    then begin
      Exit;
    end;
  try
    iSystemFolder := CSIDL;
    if (SUCCEEDED (SHGetSpecialFolderLocation (0, iSystemFolder, ItemIDList)))
      then begin
        SetLength (sFolderPath, MAX_PATH);
        if (SHGetPathFromIDList(ItemIDList, PChar(sFolderPath)))
          then begin
            SetLength (sFolderPath, Length(PChar(sFolderPath)));
          end;
      end;
  finally
    Result := sFolderPath;
    pMalloc.Free(ItemIDList);
  end;
end;

var
  myDocPath: string;
  myFilePath: string;

begin
  myDocPath := GetSpecialFolder(CSIDL_PERSONAL);

  if myDocPath <> '' then
  begin
    writeln(myDocPath);

    myFilePath := myDocPath + '\Test.cfg';
    writeln(myFilePath);

    if DirectoryExists(myDocPath) then
    begin
      with TInifile.Create(myFilePath) do
      try
        WriteString('Testsection''Test''Test123');
        writeln('write to Inifile...');
      finally
        Free;
      end;

    end else
    begin
      // Upps, Path existiert nicht
      writeln('Path existiert nicht !');
    end;

  end else
  begin
    // Upps, Path leer
    writeln('Path ist leer !');
  end;

  writeln('done.');
  readln;
end.

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P