Autor Beitrag
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.09.05 14:45 
Es gibt auf meiner Homepage wieder einen neuen Artikel: %HOMEDIR% - das unbekannte Verzeichnis. Da er ein programmierspezifisches Thema behandelt, stelle ich ihn mal hier vor. In dem Artikel geht es um die Unsitte, dass Programmierer leider immer noch ihre Konfiguratiosndaten im Programmverzeichnis abelegen. In der letzten Zeit ist mir das immer wieder bei Programmen aufgefallen, die hier oder in anderen Foren vorgstellt werden. Da ich es leid war immer wieder das gleiche zu schreiben, hab eich mir erlaubt einen Artikel zuschreiben und es dort noch etwas weiter auszuführen.

Link zum Artikel: %HOMEDIR% - das unbekannte Verzeichnis

Über Kritik und Anregungen würde ich mich freuen.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 22.09.05 14:57 
also ich schreibe momentan ein programm welches ohnehin temporäre dateien im programmverzeichnis anlegt, aber ich HASSE es, wenn mir irgendwelche programme irgendwelche inis irgendwo hinklatschen, da ist mir das programmverzeichnis doch am liebsten, jedenfalls als admin, ansonsten hast du ja recht, aber es gibt viele programme die das so machen, das problem also weit verbreitet. dennoch bleiben oft Leichen zurück und viele programme haben auch eine "Settings.ini" welche dann von 4 programmen zugleich genutzt wird, die probleme kann man sich ja vorstellen.

ich bin aber einsichtig und ändere meine meinung in die hinsicht, dass ich sämtliche paramstr(0)s durch das HOMEDIR ersetzen werde. dennoch solltest du noch einen vorschlag hinzufügen wie man dateien handlet, die nur kurz abgespeichert und dann wieder gelöscht werden (wüsste ich jetzt auch gerne, sonst bringt mir der umstieg nix). ansonsten finde ich den artikel sehr schön ;)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.09.05 15:03 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
also ich schreibe momentan ein programm welches ohnehin temporäre dateien im programmverzeichnis anlegt, aber ich HASSE es, wenn mir irgendwelche programme irgendwelche inis irgendwo hinklatschen, da ist mir das programmverzeichnis doch am liebsten,

Und damit sorgst du weiterhin für Frust bei den Windoiwsbenutzern, die eben nicht als Adminsitrator arbeiten, wie es auch sein sollte.

Zitat:

jedenfalls als admin, ansonsten hast du ja recht, aber es gibt viele programme die das so machen, das problem also weit verbreitet.

Und desegen dieser Artikel, um mal auf die Problematik aufmerksam zu machen.

Zitat:

dennoch bleiben oft Leichen zurück und viele programme haben auch eine "Settings.ini" welche dann von 4 programmen zugleich genutzt wird, die probleme kann man sich ja vorstellen.

Das ist ein Sonderfall. Dann muss man eben für jede Anwendung eine eigene Konfigurationsdatei erstellen, auch wenn deren Inhalt dann identisch ist.

Zitat:

dennoch solltest du noch einen vorschlag hinzufügen wie man dateien handlet, die nur kurz abgespeichert und dann wieder gelöscht werden (wüsste ich jetzt auch gerne, sonst bringt mir der umstieg nix).

Temporäre Dateien sind nicht Thema dieses Artikels. Aber die gehören in den Temp-Ordner des Benutzers. Wo ist das Problem?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 22.09.05 15:24 
im grunde genommen ist das mit dem temp ordner das gleiche problem, kommt man da genauso ran wie ans homeverzeichnis ? welche globale variable ist das denn ?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.09.05 15:30 
Jeder Benutzer hat natürlich auch sein eigenes temporäres Verzeichnis: C:\Dokumente und Einstellungen\<Benutzer>\Lokale Einstellungen\Temp

Dafür gibt es die API Funktion: Suche im MSDN GETTEMPPATH.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 22.09.05 15:52 
mit deiner prozedur kommt mein delphi nicht klar, muss ich da noch was besonderes einbinden ? kannst du vielleicht noch ein anwendungsbeispiel reinpacken, wäre net, das mit dem temp ordner hab ich schon hinbekommen ;)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.09.05 18:19 
Äh, da fehlt in der Uses noch:
ausblenden Delphi-Quelltext
1:
2:
uses
  shlobj;
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 22.09.05 18:29 
Ich bin ehrlich: So habe ich noch nicht darüber nachgedacht.
Da ich auch eine Komponente geschrieben habe, die Daten in der Registry oder in INI-Dateien schreibt, werde ich da mit Sicherheit eine Anpassung einbauen. Zumindest so, dass der Programmierer entscheiden kann, wo er es hin haben möchte. Einstellen kann man das zwar jetzt auch schon, aber wenn der Default-Wert gleich richtig ist, ist es besser.
Danke für das Tut.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 27.10.05 11:13 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TMainForm.Speichern1Click(Sender: TObject);
var
  ini: Tinifile;
begin
  ini := Tinifile.Create(GetShellFolder(CSIDL_APPDATA)+'DrumMachine.ini');
  try
    if fileexists(GetShellFolder(CSIDL_APPDATA)+'DrumMachine.ini'then
      showmessage('jo'else
        showmessage('neee');  
  finally
    ini.Free;
  end;
end;

gibt als showmessage immer neee aus, vor der DrumMachine.ini ein \ bringt auch nischt.

Deine Prozedur ist bei mir unverändert so eingebunden, mit den uses shlobj und activex:
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:
(***********************************************
***********Prozedur von Michael Puff************
***********************************************)

function GetShellFolder(CSIDL: integer): string;
var
  pidl                   : PItemIdList;
  FolderPath             : string;
  SystemFolder           : Integer;
  Malloc                 : IMalloc;
begin
  Malloc := nil;
  FolderPath := '';
  SHGetMalloc(Malloc);
  if Malloc = nil then
  begin
    Result := FolderPath;
    Exit;
  end;
  try
    SystemFolder := CSIDL;
    if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
    begin
      SetLength(FolderPath, max_path);
      if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
      begin
        SetLength(FolderPath, length(PChar(FolderPath)));
      end;
    end;
    Result := FolderPath;
  finally
    Malloc.Free(pidl);
  end;
end;
(***********************************************
************************************************
***********************************************)


:?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.10.05 11:16 
Hast du schon mal selber egguckt, ob die Datei existiert? Und hast du schon mal geguckt, was du überhaupt für einen Pfad zurück bekommst? Ist das denn der richtige?

Btw. gehört das nicht hier rein, sondern in einen extra Thread in der entsprechenden Sparte.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 27.10.05 11:19 
ausblenden Delphi-Quelltext
1:
fileexists(GetShellFolder(CSIDL_APPDATA)+'DrumMachine.ini')					


der pfad ist der richtige, oder erstellt er die ini erst wenn etwas hineingeschrieben wird ?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.10.05 11:20 
ja.