Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi #0 aus String entfernen (https://www.delphipraxis.net/132574-0-aus-string-entfernen.html)

Andreas L. 15. Apr 2009 13:01


#0 aus String entfernen
 
Hi,
mit folgender Routine lese ich den aktuellen Benutzernamen aus
Delphi-Quellcode:
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;
um ihn in einem Dateinamen zu verwenden:
Delphi-Quellcode:
LSV.SaveToFile(Path + GetCurrentUserName + '@' + List[iLine] + '[' + IntToStr(i) +'].txt');
Leider wird immer nur Path + GetCurrentUserName als Dateiname gespeichert. Durch den Debugger hab ich herausgefunden das beim von GetCurrentUserName zurückgegebenen String ein #0 am Ende steht. Ich hab mit folgenden Codes versucht #0 zu entfernen. Leider funktionierts nicht.
Delphi-Quellcode:
Result := StringReplace(sUserName, #0, '', [rfReplaceAll]);
Delphi-Quellcode:
Delete(Result, Length(Result), 1);
Was mache ich falsch?

Grüße,
Andy

TurboMartin 15. Apr 2009 13:06

Re: #0 aus String entfernen
 
trim() ?

p80286 15. Apr 2009 13:09

Re: #0 aus String entfernen
 
Hallo Andreas,

aus der Hüfte geschossen versuch es mal mit
Delphi-Quellcode:
var
  sUserName: string[255];
und
Delphi-Quellcode:
GetUserName(@sUserName[1]), dwUserNameLen);
soll dwUserNameLen eigentlich die #0 mit enthalten oder nicht?

Gruß
K-H

Andreas L. 15. Apr 2009 13:11

Re: #0 aus String entfernen
 
Zitat:

Zitat von TurboMartin
trim() ?

Man, wo hab ich heute meinen Kopf. :wall: Da hätte ich auch selbst drauf kommen können. Danke :-D

sx2008 15. Apr 2009 13:29

Re: #0 aus String entfernen
 
Eigentlich ist doch aber deine Funktion GetCurrentUserName fehlerhaft.
Der Fehler mit Trim zu korrigieren ist dann eher unschön.
Ungestest, aber ich denke du kommst damit klar:
Delphi-Quellcode:
function GetCurrentUserName:string;
const
  cnMaxUserNameLen = 254;
var
  dwUserNameLen: DWORD;
begin
  dwUserNameLen := cnMaxUserNameLen - 1;
  SetLength(Result, cnMaxUserNameLen); // besser Result als Puffer verwenden
  // immer den Returncode einer Windows API Funktion auswerten
  if GetUserName(PChar(sUserName), dwUserNameLen) then
    SetLength(Result, dwUserNameLen-1) // in der rückgegebenen Länge in die #0 mit enthalten
  else
    Result := '';
end;

TurboMartin 15. Apr 2009 13:35

Re: #0 aus String entfernen
 
Zitat:

Zitat von sx2008
Eigentlich ist doch aber deine Funktion GetCurrentUserName fehlerhaft.
Der Fehler mit Trim zu korrigieren ist dann eher unschön.

Ich hab nicht nach der Funktion geschaut, einfach nur die Frage beantwortet, wie er #0 wegbekommt.

Andere Sache, wo kommt aufeinmal #3 her, der war bei der Antwort von Autor, als ih sie gelesen habe, nocht nicht da, wieso ist der aber jetzt aufeinmal da? :gruebel: :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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