Autor Beitrag
rob87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 19.11.08 15:50 
Hallo wiedermal,

Ich hab folgenden Sachverhalt:
Ich will ein PDF in den Eigenen Dateien des Users speichern. Soweit sogut. Nur habe ich nun grad bemerkt, dass mein Programm einen Fehler bringt, wenn der Eigene-Dateien-Pfad als letzten Buchstaben ein "\" hat.
Dann löst er nämlich die Datei in der Art auf Bsp.: "D:\\test1.pdf" und nicht "D:\test1.pdf"

Daher brauch ich eine Unterscheidung bez. des letzten Zeichens des Pfades.
Mein Pfad ist vom Typ:
ausblenden Delphi-Quelltext
1:
path: Array [0..Max_Path] Of Char					

Wie krieg ich nun das letzte Zeichen dieses Char-Arrays?

Meine Vorgehensweise wäre dann:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if letztesZeichen von path = "\" then
  RvSystem1.OutputFileName := 'test1.pdf';
else
  RvSystem1.OutputFileName := '\test1.pdf';
i
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 19.11.08 16:56 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if path[Max_Path] = "\" then
  RvSystem1.OutputFileName := 'test1.pdf';
else
  RvSystem1.OutputFileName := '\test1.pdf';
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 19.11.08 17:14 
user profile iconazubi_20 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if path[Max_Path] = "\" then
  RvSystem1.OutputFileName := 'test1.pdf';
else
  RvSystem1.OutputFileName := '\test1.pdf';

Soweit war ich auch schon. Aber ich brauch ned des letzte Zeichen von dem Array. Sondern des letzte beschriebene.

Da muss ich dann wahrsch. mit ner Schleifen arbeiten?? Dafür gibts keine Funktion?
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 19.11.08 17:25 
Du kannst dir ja mit ner Schleife ne eigene Funktion bauen.

BTW: den Pfad für "Eigene Dateien bekommt man so : GetShellDirectoryEx(CSIDL_PERSONAL, 'Personal');
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 19.11.08 17:28 
user profile iconazubi_20 hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst dir ja mit ner Schleife ne eigene Funktion bauen.

Hmmm :-( Ich befürchts. Entweder das oder eine Funktion zur Umwandlung von String in PAnsiChar.
user profile iconazubi_20 hat folgendes geschrieben Zum zitierten Posting springen:

BTW: den Pfad für "Eigene Dateien bekommt man so : GetShellDirectoryEx(CSIDL_PERSONAL, 'Personal');

Muss ma dafür irgendwelche Units einbinden? Oder von welchem Typ ist "GetShellDirectoryEx"? Bei mir meckert er den Bezeichner an. Denn bei deiner Variante bräucht ich keine Variable vom Typ PAnsiChar. Sondern könnt einfach einen String nehmen. Und bei nem String wirds doch wohl die Möglichkeit geben, das letzte Zeichen rauszukriegen ---> copy(sPath,last,1) //wobei hier "last" eben noch nicht bekannt ist

Ich habs so gemacht:
ausblenden Delphi-Quelltext
1:
2:
SHGetSpecialFolderLocation(0,CSIDL_PERSONAL, pIDL);
SHGetPathFromIDList(pIDL,path);

;-)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.11.08 17:46 
Es gibt da noch die Funktion IncludeTrailingPathDelimiter in SysUtils. Wäre wahrscheinlich einfacher ;)
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mi 19.11.08 18:56 
user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:
...
Soweit war ich auch schon. Aber ich brauch ned des letzte Zeichen von dem Array. Sondern des letzte beschriebene.

Da muss ich dann wahrsch. mit ner Schleifen arbeiten?? Dafür gibts keine Funktion?


Gibts (Ptr ist PChar): Ptr := StrEnd (MyPChar) - 1;

Gruss Reinhard

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.11.08 19:07 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
uses SHFolder;

function GetUserPath(out sPath: string): Boolean;
begin
  SetLength(sPath,MAX_PATH);
  SHGetFolderPath(0,CSIDL_PERSONAL,0,0,PAnsiChar(sPath));
  SetLength(sPath,StrLen(PAnsiChar(sPath)));
  Result := Length(sPath) > 0;
  if Result then 
    sPath := IncludeTrailingPathDelimiter(sPath);
end;


Gibt bei Erfolg den Pfad zu den eigenen Dateien samt Backslash zurück.
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 01.12.08 11:59 
user profile iconazubi_20 hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst dir ja mit ner Schleife ne eigene Funktion bauen.

BTW: den Pfad für "Eigene Dateien bekommt man so : GetShellDirectoryEx(CSIDL_PERSONAL, 'Personal');


Hast du da irgendwelche Units eingebunden? Ich denk, der braucht da bei mir noch eine Unit...
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 01.12.08 15:25 
Frage beantwortet. Thread beendet. Merci an alle