Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ExtractFilePath für C++ (https://www.delphipraxis.net/104272-extractfilepath-fuer-c.html)

Matze 30. Nov 2007 19:51

Re: ExtractFilePath für C++
 
Jupp *g* Nur haben wir gelernt, man müsste Char-Arrays nutzen. Von C# & Co. kenne ich Strings, nur bin ich nicht auf die Idee gekommen, dass es auch einen im Win32-C++ gibt, da uns das, wie gesagt, so gesagt wurde.

static_cast 30. Nov 2007 20:07

Re: ExtractFilePath für C++
 
Vor dem selben Problem stand ich auch schon mal, irgendwie muss man in plain C/C++ das das Quadrat immer zum Rad (um nicht zu sagen das Rad neu erfinden) feilen ;)

Meine Lösung war:
Code:
std::string extractFilePath(const char* fileName)
{
   std::string result("");
   char filePath[MAX_PATH+1];
   ZeroMemory(&filePath,MAX_PATH+1);

   WIN32_FIND_DATA findFileData;
   HANDLE hFind = FindFirstFile(fileName, &findFileData);
   if (hFind != INVALID_HANDLE_VALUE)
   {
      strncpy((char*)filePath,fileName,strlen(fileName) - strlen(findFileData.cFileName) - 1);
      result = filePath;
      FindClose(hFind);
   }

   return result;
}

DMW 30. Nov 2007 20:13

Re: ExtractFilePath für C++
 
Warum einfach, wenns auch umständlich geht :mrgreen:
Außerdem ist deine Lösung hochgradig ineffizient und funktioniert nicht für den Fall, daß der gegebene Pfad eventuell gar nicht auf dem System existiert oder nicht zugreifbar ist.

static_cast 30. Nov 2007 20:24

Re: ExtractFilePath für C++
 
Zitat:

Zitat von DMW
Warum einfach, wenns auch umständlich geht :mrgreen:
Außerdem ist deine Lösung hochgradig ineffizient und funktioniert nicht für den Fall, daß der gegebene Pfad eventuell gar nicht auf dem System existiert oder nicht zugreifbar ist.

Mein Ziel war auch nicht das es performant ist sondern sicher (abgesehen davon sollte das nur eine Anregung sein, wie man das backslashgesuche umgehen kann), und so sparte ich mir gleichzeitig eine Überprüfung ob die Datei existiert. Ich habe die Funktion auch aus meiner tools lib geschnappt und vor dem posten noch etwas angepaßt (auf std::string), in dem namespace sind auch noch Funktionen für den Status etc der von der Funktion gesetzt wird (Fehler Datei gibts nicht usw...), was hier aber eher overhead wär ;)

uligerhardt 30. Nov 2007 20:27

Re: ExtractFilePath für C++
 
Zitat:

Zitat von Matze
Jupp *g* Nur haben wir gelernt, man müsste Char-Arrays nutzen. Von C# & Co. kenne ich Strings, nur bin ich nicht auf die Idee gekommen, dass es auch einen im Win32-C++ gibt, da uns das, wie gesagt, so gesagt wurde.

Irgendwie haben scheinbar alle C++-Lehrenden das Bedürfnis, ihre Opfer erstmal mit Low-level-C zu traktieren. Das ist wahrscheinlich wie bei den Automechanikern, die ja angeblich in der Ausbildung auch imme noch Metallklötze kleinfeilen müssen. :roll:

sniper_w 30. Nov 2007 22:31

Re: ExtractFilePath für C++
 
Code:
#include <windows.h>
#include <iostream>
#include <string>

using std::string;

int main()
{
    char moduleName[1024];

    if(!GetModuleFileName( NULL, moduleName, 1024))
    {
        std::cout << "GetModuleHandle failed!!" << std::endl;
        return 0;
    }
    else
    {
        std::cout << moduleName << std::endl;
    }

    string filePath;

    filePath.assign(moduleName);

    int pos = filePath.find_last_of('\\');
    filePath.erase(pos+1);

    std::cout << filePath << std::endl;

   return 0;
}

Matze 30. Nov 2007 22:37

Re: ExtractFilePath für C++
 
Hui, das ist eine schöne Lösung, danke. :)

Luckie 30. Nov 2007 22:47

Re: ExtractFilePath für C++
 
Da gibt es eine API-Funktion für. Ich vergesse nur immer, wie die heißt und die DLL vergesse ich auch immer. Frag oder such mal im c-plusplus.de Forum.

http://www.c-plusplus.de/forum/viewt...341.html#82341

Oder MSDN-Library durchsuchenPathFindFileName und guck dir auchmal die anderen Path... Funktionen im SDK an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 3 von 3     123   

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