![]() |
problem mit ini erstellen
Ich hab ein kleines Problem... ich habe ein Programm, dass eine text datei (.iim format) erstellt. damit die datei erstell werden kann muss man erst das outputverzeichnis anlegen.. soweit sogut.. hat alles prima geklappt bis jetzt.. ich will das programm aber später kostenlos zum download zur verfügung stellen und dann soll das outputverzeichnis automatisch in einem ordner gespeichert werden (C:\User\Username\Documents\iMacros\Macros) da ich ja nicht den Usernamen von jedem der sich das runterlädt weiß, lass ich den einfach durch eine funktion herausfinde, das klappt auch immernoch..
ich poste hier jetzt erstmal den code
Code:
so wenn ich das ganze ohne das Result mache, also einfach den Usernamen, also in meinem fall markus dahinschreib dann speichert der das da auch ganz normal, aber so versucht der das bei mir jetzt nur unter C:\Users\Markus zu speichern, lässt also den ganzen rest einfach weg...
unit Unit2;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, IniFiles, Windows; type { TForm2 } TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; output, iniout: string; ini : TIniFile; Result : string; implementation { TForm2 } function GetCurrentUserName: string; const cnMaxUserNameLen = 254; var sUserName: string; dwUserNameLen: DWORD; begin dwUserNameLen := cnMaxUserNameLen - 1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := sUserName; end; procedure TForm2.Button1Click(Sender: TObject); begin Result := (GetCurrentUserName); output := edit1.Text; form2.visible := false; ini := TIniFile.Create ('C:\Users\'+Result+'\Documents\iMacros\Macros\DS.ini'); try ini.WriteString ('Einstellung', 'output', output); finally ini.Free; end; end; so kann mir dabei irgendjemand helfen? ps: wenn das hier falsch ist wäre ich sehr dankbar wenn es an die richtige stelle verschoben wird danke schonmal im vorraus |
AW: problem mit ini erstellen
Du solltest Deine globale Variable nicht unbedingt Result nennen, oder noch besser: sie gleich ganz weglassen. Was Du suchst, findest Du in der Unit SHFolder, damit bekommst Du den gewünschten Pfad heraus und musst Dich nicht auf C:\ festlegen. Such am Besten in der DP mal nach
![]() P.S.: Willkommen in der DP :dp: |
AW: problem mit ini erstellen
@Markus
Hier ein Link zu einer von drei Units: ![]() |
AW: problem mit ini erstellen
Autsch! Ich dachte, die Zeit hartkodierter Pfade wäre vorbei...:shock:
Erstens wird der Code nur auf Vista+ das "richtige" Verzeichnis finden und zweitens wird das auf Vista+ auch nur dann funktionieren, wenn der Nutzername exakt mit dem Namen des Verzeichnisses übereinstimmt. Punkt 1 sollte klar sein, denn das Profilverzeichnis liegt bei den versch. Windows-Versionen woanders. Bei Win2k/XP ist es sogar noch lokalisiert = an die Landessprache angepasst und vom Laufwerk C: will ich jetzt nicht auch noch anfangen... Punkt 2 erkläre ich mal etwas näher: Ich erstelle ein Benutzerkonto "Willi", das es bisher noch nicht gab. Die erste Anmeldung dieses Benutzers erstellt das Verzeichnis "Willi" im Profilverzeichnis. Später fällt mir ein, dass der Benutzername doch nicht so toll ist und ich benenne ihn um in "Hans". Ergebnis: Das Benutzerkonto bleibt liegen in "Willi", deine Funktion wird aber "Hans" als Nutzername ermitteln und versucht, dort zu speichern, was natürlich nicht funktionieren kann (es sei denn, das Programm läuft als Admin = böse). Also bitte unbedingt entsprechende API-Funktionen wie SHGetFolderPath oder SHGetKnownFolderPath (erst ab Vista verfügbar!) benutzen, um die gewünschten Verzeichnisnamen zu ermitteln. MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz