AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ExtractFilePath für C++

Ein Thema von Matze · begonnen am 30. Nov 2007 · letzter Beitrag vom 30. Nov 2007
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 19:51
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.
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#22

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 20:07
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;
}
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#23

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 20:13
Warum einfach, wenns auch umständlich geht
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.
Moritz
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#24

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 20:24
Zitat von DMW:
Warum einfach, wenns auch umständlich geht
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
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#25

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 20:27
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#26

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 22:31
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;
}
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 22:37
Hui, das ist eine schöne Lösung, danke.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#28

Re: ExtractFilePath für C++

  Alt 30. Nov 2007, 22:47
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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