Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht (https://www.delphipraxis.net/145080-c-%5Cusers%5C-benutzername%5Cneu%5Cddd-txt-geht-nicht.html)

-Phantom- 23. Dez 2009 00:56


'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Moin moin,

So mein Problem ist diesmal das ich eine Datei löschen will zu erst soll der Benutzername festgestellt werden. Bekomme ich auch alles gut hin. Aber ich verzweifel daran den Filename einzugeben.
Delphi-Quellcode:
Benutzername :=  GetUsername;
filename := 'C:\Users\'+ Benutzername'\neu\ddd.txt'; // Hier muss ein Fehler sein. Wie füge ich den den "Benuzernamen" mit in den Pfad ein? Kann eig. nur ein dummer Fehler von mir sein aber ich habe schon probiert und probiert aber bekomme es nicht hin.
Deletefile(filename);

Namenloser 23. Dez 2009 01:18

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Wie wär's damit:
1. Schau dir die Zeile mal genau an. Fällt dir was auf?
2. Lies nochmal genau den Fehler, den Delphi ausgibt.
3. Schau dir die Zeile noch mal genau an. Fällt dir jetzt was auf?

[edit]
Ich gehe mal davon aus, dass doch nicht der offensichtliche Syntaxfehler gemeint war. :glaskugel:
GetUsername ist eine API-Funktion und kennt Delphi-Strings gar nicht, weshalb sie auch keinen zurückgeben kann. Du musst stattdessen einen Zeiger auf einen ausreichend großen Puffer sowie die Länge des Puffers als ersten bzw. zweiten Parameter an die Funktion übergeben. Wenn du einmal kurz in der IDE F1 oder Strg+Shift+Space gedrückt hättest, wäre dir das auch aufgefallen. Beispiele zum korrekten Aufruf sollten sich hier im Forum finden lassen.
[/edit]

Abgesehen davon ist das nicht gerade der sicherste Weg, das Benutzerverzeichnis herauszufinden - der kann nämlich je nach Betriebssystemversion und persönlichen Einstellungen auch völlig woanders liegen. Um solche speziellen Pfade zuverlässig herauszufinden gibt es Delphi-Referenz durchsuchenSHGetFolderPath.

[edit]Glaskugel kaputt, und mein erster Gedanke war doch der richtige... :wall: [/edit]

-Phantom- 23. Dez 2009 01:28

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Ne also das mit dem Benutzernamen hab ich hin bekommen dazu braucht man die Funktion:
Delphi-Quellcode:
function GetUsername: string;
var
  Buffer: array[0..255] of Char;
  Size: DWord;
begin
  Size := SizeOf(Buffer);
  if not Windows.GetUserName(Buffer, Size) then
    RaiseLastOSError;
  SetString(Result, Buffer, Size - 1);
end;
als test hab ich auch gemacht label1.caption := Benutzernamen und dann kam da auch mein Benutzername!
Ich will ja nur wissen wie ich Benutzername richtig in diesen Pfad einbinde! mehr will ich gar nicht.
Und ich will ja nicht wissen wo irgend welche Ordner sind !

Luckie 23. Dez 2009 01:40

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Ich schenke dir ein "+", aber erst morgen auspacken.

-Phantom- 23. Dez 2009 01:48

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
So danke das wollte ich nur wissen ^^ Man habe mir schon gedacht das , dass so ein dummer Fehler sein muss. Aber ich bin einfach nicht drauf gekommen xD

Luckie 23. Dez 2009 01:53

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Und was hat der Compiler für eine Fehlermeldung ausgegeben?

wicht 23. Dez 2009 01:59

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Bevor du irgendwas komisches frickelst, schau dir wirklich, wie schon gesagt, mal SHGetFolderPath an...

Edit:
Delphi-Quellcode:
uses
  ActiveX, ShlObj;

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

function PfadZuAnwendungsDaten: string;
begin
  Dir := GetShellFolder(CSIDL_APPDATA);
end;
Um zum Benutzerprofil zu kommen, musst du vermutlich unten CSIDL_APPDATA durch $0028 ersetzen.

-Phantom- 23. Dez 2009 18:15

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Zum lezten mal ich bekomme das doch hin mit dem Benutzernamen !! Wo ist das zweite plus noch nicht gesezt hatte kann da ich brauche noch ein Operator oder Simicolen. Wo das zweite Plus da war ging alles super !

Mithrandir 23. Dez 2009 18:27

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Zitat:

Zitat von -Phantom-
Zum lezten mal...

Du redest hier nicht mit deinen Kumpels oder irgendwelchen Kleinkindern!! :warn: :warn:

Wenn du das so zusammenbaust, wie du es jetzt hast, dann schließt du schonmal kategorisch alle Benutzer < Vista aus, denn unter XP heißt das Verzeichnis nunmal "Dokumente und Einstellungen" bzw. "Documents and Settings".

Und wer weiß, wie es in Windows 8 heißt?

Es war also lediglich ein gut gemeinter Rat. Aber, bitte sehr. Manche Individueen müssen halt erst auf die Schnauze fallen, um zu lernen. Der Mensch ist eins davon...

-Phantom- 23. Dez 2009 19:58

Re: 'C:\Users\'+ Benutzername'\neu\ddd.txt' geht nicht
 
Oke... Also hab ich das nun so verstanden das meine Funktion den Benutzernamen herauszufinden nur unter Vista geht und nicht unter XP? Naja wenn das so ist probiere ich mal den Vorschlag aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr.
Seite 1 von 2  1 2      

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