AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit ini erstellen

Ein Thema von Markus · begonnen am 27. Mär 2012 · letzter Beitrag vom 27. Mär 2012
Antwort Antwort
Markus

Registriert seit: 27. Mär 2012
1 Beiträge
 
#1

problem mit ini erstellen

  Alt 27. Mär 2012, 18:23
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:
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 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...
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: problem mit ini erstellen

  Alt 27. Mär 2012, 18:38
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 Hier im Forum suchenSHGetFolderPath, da solltest Du einige Beispiele finden.

P.S.: Willkommen in der DP
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: problem mit ini erstellen

  Alt 27. Mär 2012, 19:00
@Markus

Hier ein Link zu einer von drei Units: http://www.delphi-forum.de/viewtopic...=247902#247902 . Diese (dritte) Unit speichert die Ini im Anwendungsdatenordner. Ändert man die Konstante CSIDL_APPDATA in CSIDL_PERSONAL, kann man auch in Dokumente Verzeichnis speichern. Du mußt die Unit nicht nutzen, aber das was du brauchst steht drin.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#4

AW: problem mit ini erstellen

  Alt 27. Mär 2012, 19:02
Autsch! Ich dachte, die Zeit hartkodierter Pfade wäre vorbei...

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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