GetPathName ohne Dateiname



  • Hallo.

    Wieso liefert mir "GetPathName" den Pfad inkl. Dateiname? 😞

    Ich brauche nur den Pfad, wie werde ich den Dateinamen los?

    Danke.

    mfg



  • Du kannst einfach das letzte '\' im zurückgegebenen Namen suchen und alles dahinter abschneiden/ignorieren/whatever.



  • "einfach" ist relativ. 😞

    mfg



  • CString path=dlg.GetPathName();
    path.Delete(path.ReverseFind('\\'),path.Length());
    

    Was ist daran denn schwierig?



  • Habs nun so gemacht:

    int pos = m_strFilename.ReverseFind('\\');
    m_strFilename = m_strFilename.Mid(0,pos);
    

    CStoll schrieb:

    Was ist daran denn schwierig?

    Wenn man etwas monate-/jahrelang gemacht hat, ist nichts mehr schwierig. Aber es soll ja noch Leute geben, die noch nicht so lange programmieren.

    mfg



  • vollkommenegal schrieb:

    Aber es soll ja noch Leute geben, die noch nicht so lange programmieren.

    Für solche Leute gibt es ein äußerst praktisches Hilfsmittel: die MSDN 😉



  • die MSDN 😉

    Dumm nur, wenn man nicht weiß, wonach man suchen muss. Was bringt mir eine Funktions-Beschreibung, wenn ich nicht weiß, welche Funktion ich haben muss?


  • Administrator

    Naja man muss dann halt auch ein paar eigene Ideen mitliefern. Ist wie mit jeder Suchmaschine in einer Dokumentation. Man muss zuerst lernen mit ihr umzugehen ^^ ...
    Du kannst dir ja z.b. mal CString anschauen, was es für Möglichkeiten anbietet. Oder deine Klasse in der du GetPathName aufrufst, ob sie noch was anderes anbietet. Wenn sie nichts anderes anbietet, dann sollte dir klar werden, dass du es abschneiden musst, dann schaut man sich eben CString an.

    Übrigens, nur für den Fall, wenn du CFileDialog benutzt, da gibt es ein GetFolderPath. Wenn du es allerdings z.b. bei CDocument benutzt, dann gibt es sowas nicht.

    Grüssli



  • Dravere schrieb:

    Naja man muss dann halt auch ein paar eigene Ideen mitliefern.

    Dann frage ich mich, wozu es überhaupt Foren gibt, wenn man sich sowieso alles selber zusammensuchen soll. Also bitte: wer nicht helfen will, der soll es lassen. 😞

    Dravere schrieb:

    z.b. mal CString anschauen, was es für Möglichkeiten anbietet [. . .] dann sollte dir klar werden, dass du es abschneiden musst

    Und genau das wollte ich einfach nur bestätigt haben(ggf. mit einem kleinen Tipp, wie ich das mache), denn ich erwarte bei "GetPathName" (naiv wie ich bin) den Pfadnamen. Hätte ja sein können, dass ich etwas falsch gemacht habe, also wird man doch wohl fragen dürfen, oder nicht?

    Dravere schrieb:

    wenn du CFileDialog benutzt

    Ja, mache ich.

    Dravere schrieb:

    da gibt es ein GetFolderPath

    Hatte ich bereits getestet, aber wenn ich in meinem "Öffnen"-Dialog eine Datei ausgewählt habe, springt mir ein fröhliches "Debug Assertion Failed!" entgeben, was einen Anfänger wie mich zurückschrecken und nach einer anderen Lösung suchen lässt.

    mfg



  • vollkommenegal schrieb:

    denn ich erwarte bei "GetPathName" (naiv wie ich bin) den Pfadnamen.

    Und ehe du dich auf diese "naive" Erwartung verlässt, solltest du besser in der MSDN nachschauen, WAS GetPathName() wirklich zurückliefern will 😉

    MSDN - GetPathName() schrieb:

    Call this function to retrieve the full path of the file entered in the dialog box.

    The path of the filename includes the file's title plus the entire directory path.

    Dravere schrieb:

    da gibt es ein GetFolderPath

    Hatte ich bereits getestet, aber wenn ich in meinem "Öffnen"-Dialog eine Datei ausgewählt habe, springt mir ein fröhliches "Debug Assertion Failed!" entgeben, was einen Anfänger wie mich zurückschrecken und nach einer anderen Lösung suchen lässt.

    Also für mich ist eine Debug Assertion normalerweise ein Grund, mir zunächst die fehlgeschlagene Bedingung anzusehen (oder mal wieder in der MSDN nachzuschlagen:

    MDSN - GetFolderPath schrieb:

    The dialog box must have been created with the OFN_EXPLORER style; otherwise, the function will fail with an assertion.



  • CStoll schrieb:

    in der MSDN nachschauen, WAS GetPathName() wirklich zurückliefern will 😉

    Dass "GetPathName" nicht das zurückliefert, was ich erwartet/erhofft hatte, hab ich auch schnell gemerkt. Dazu brauch ich die MSDN nicht. 🙂

    CStoll schrieb:

    The dialog box must have been created with the OFN_EXPLORER style; otherwise, the function will fail with an assertion.

    Und Du glaubst, dass ich auch nur ein Bruchteil von dem verstanden habe? Was weiß denn ich, was OFN_EXPLORER ist. Also halte ich mich doch mit sowas nicht lange auf und suche nach einer anderen Lösung.

    Ich gehe immer den Weg des geringsten Widerstandes, denn viele Wege führen nach Rom und warum sollte ich mich abquälen? Deshalb auch meine Frage im Forum, denn wenn ich mir selber zuviel "zusammendenke", besteht die Gefahr, dass ich mich verrenne. Also frage ich jemanden, der sich damit auskennt, damit ich gleich den richtigen Weg lernen kann.

    Wenn ich aber berücksichtigt hätte, dass ich mich hier mehr verteidigen muss, als dass ich Infos bekomme, hätte ich doch lieber in die MSDN geguckt, mir einen bei der Programmierung abgebrochen und die Frage im Forum verkniffen. 🤡 (*ACHTUNG, IRONIE und WITZ*)

    mfg


  • Administrator

    vollkommenegal schrieb:

    Dravere schrieb:

    Naja man muss dann halt auch ein paar eigene Ideen mitliefern.

    Dann frage ich mich, wozu es überhaupt Foren gibt, wenn man sich sowieso alles selber zusammensuchen soll. Also bitte: wer nicht helfen will, der soll es lassen. 😞

    Ich helfe immer gern, aber ich sitze jetzt schon eine Stunde (oder mehr?) hier im Forum rum. Dabei sollte ich noch proggen *g*
    Man kann hier hin kommen um Hilfe zu bitten klar, aber man sollte vorher schon selber was versucht haben. Ich werfe dir jetzt nicht vor, dass du es noch nicht versucht hast. Aber das Forum sollte, wenn man so will, eine der letzten Hoffnungen darstellen (zumindest seh ich das so). Sonst hat es hier noch mehr Hilfegesuche als es eh schon hat. Irgendwann sind es dann einfach zu viele.

    Dravere schrieb:

    z.b. mal CString anschauen, was es für Möglichkeiten anbietet [. . .] dann sollte dir klar werden, dass du es abschneiden musst

    vollkommenegal schrieb:

    Und genau das wollte ich einfach nur bestätigt haben(ggf. mit einem kleinen Tipp, wie ich das mache), denn ich erwarte bei "GetPathName" (naiv wie ich bin) den Pfadnamen. Hätte ja sein können, dass ich etwas falsch gemacht habe, also wird man doch wohl fragen dürfen, oder nicht?

    Doch doch ... siehe oben *g*
    Und unter dem Pfad verstehe ich nicht nur den Ordnerpfad. Aber das kann man ja eben auch in der MSDN lesen. Da steht, dass man den vollständigen Pfad zurückbekommt.

    vollkommenegal schrieb:

    Dravere schrieb:

    da gibt es ein GetFolderPath

    Hatte ich bereits getestet, aber wenn ich in meinem "Öffnen"-Dialog eine Datei ausgewählt habe, springt mir ein fröhliches "Debug Assertion Failed!" entgeben, was einen Anfänger wie mich zurückschrecken und nach einer anderen Lösung suchen lässt.

    Falsch gemacht, du musst nicht zurückschrecken, sondern dem Fehler nachgehen. Ein Debug Assertion Failed wird durch ein ASSERT aufgerufen. Also eine ASSERT-Anweisung hat nicht TRUE geliefert. Mit wiederholen, kannst im Debug ja zum Fehler hingehen und ihn dir anschauen. Dafür ist ja der Debugger da. Per Call Stack kannst zurückverfolgen was aufgerufen wurde und wieso der Wert also nicht stimmt. Zudem bei mir funktioniert das einwandfrei, also hast du wohl irgendwie etwas falsch übergeben oder falsche Parameter zusammengesetzt oder irgendsowas. Ist viel vernünftiger du suchst diesen Fehler, denn dabei lernst du was, z.b. die richtige Anwendung von CFileDialog.
    Und so wird aus einem Anfänger mal ein Profi XD

    Grüssli



  • das Forum sollte, wenn man so will, eine der letzten Hoffnungen darstellen

    Sehe ich nicht so, denn ich finde es sehr wichtig, zu kommunizieren.

    Falsch gemacht, du musst nicht zurückschrecken, sondern dem Fehler nachgehen.

    Das überfordert einen Anfäönger wie mich aber. 😞

    also hast du wohl irgendwie etwas falsch übergeben oder falsche Parameter zusammengesetzt oder irgendsowas.

    Vorher hatte ich

    m_strFilename = ldFile.GetPathName();
    

    und daraus hab ich nur

    m_strFilename = ldFile.GetFolderPath();
    

    gemacht.

    Ist viel vernünftiger du suchst diesen Fehler, denn dabei lernst du was, z.b. die richtige Anwendung von CFileDialog.

    Es nervt und verunsichert aber, wenn man ständig irgendwelche Fehlermeldungen um die Ohren gehauen bekommen. Also nimmt man doch das, was funktioniert und versucht es anders...ich würde es jedenfalls immer so machen. 🙂

    mfg


  • Administrator

    Ich sag mal zum Rest jetzt nichts mehr. Nur noch was dazu:

    vollkommenegal schrieb:

    Dravere schrieb:

    Ist viel vernünftiger du suchst diesen Fehler, denn dabei lernst du was, z.b. die richtige Anwendung von CFileDialog.

    Es nervt und verunsichert aber, wenn man ständig irgendwelche Fehlermeldungen um die Ohren gehauen bekommen. Also nimmt man doch das, was funktioniert und versucht es anders...ich würde es jedenfalls immer so machen. 🙂

    Verunsichern muss es dich nicht. Es soll nur zeigen, dass halt was falsch ist und das ist normal für einen Anfänger. Aber wenn du immer nur den einfachsten Weg beschreitest, wirst du wohl kaum wirklich mal besser. Man muss sich den Fehler stellen um sie zu verstehen und nur dadurch kann man besser werden.
    Aber naja es sind deine Programme, welche darunter leiden.

    Grüssli


Anmelden zum Antworten