Entwickler-Ecke
Dateizugriff - letztes Zeichen aus PAnsiChar ???
rob87 - Mi 19.11.08 15:50
Titel: letztes Zeichen aus PAnsiChar ???
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:
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:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if letztesZeichen von path = "\" then RvSystem1.OutputFileName := 'test1.pdf'; else RvSystem1.OutputFileName := '\test1.pdf'; i |
azubi_20 - Mi 19.11.08 16:56
Delphi-Quelltext
1: 2: 3: 4:
| if path[Max_Path] = "\" then RvSystem1.OutputFileName := 'test1.pdf'; else RvSystem1.OutputFileName := '\test1.pdf'; |
rob87 - Mi 19.11.08 17:14
azubi_20 hat folgendes geschrieben : |
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 - 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 - Mi 19.11.08 17:28
azubi_20 hat folgendes geschrieben : |
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.
azubi_20 hat folgendes geschrieben : |
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:
Delphi-Quelltext
1: 2:
| SHGetSpecialFolderLocation(0,CSIDL_PERSONAL, pIDL); SHGetPathFromIDList(pIDL,path); |
;-)
Delete - Mi 19.11.08 17:46
Es gibt da noch die Funktion IncludeTrailingPathDelimiter in SysUtils. Wäre wahrscheinlich einfacher ;)
Reinhard Kern - Mi 19.11.08 18:56
rob87 hat folgendes geschrieben : |
...
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
matze: Delphi-Tags hinzugefügt
Delete - Mi 19.11.08 19:07
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 - Mo 01.12.08 11:59
azubi_20 hat folgendes geschrieben : |
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 - Mo 01.12.08 15:25
Frage beantwortet. Thread beendet. Merci an alle
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!