Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » __FILE__ ohne Pfad

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.07.2007, 21:26 Uhr
~tobi87
Gast


Hi,

die Präprozessordefinition __FILE__ beschreibt neben dem aktuellen Dateinamen auch noch den kompletten Pfad auf der Festplatte.
Gibt es sowas auch ohne Pfad, also nur der Dateiname?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2007, 11:48 Uhr
mike
Pinguinhüpfer
(Operator)


Er schreibt das nicht wirklich auf die Festplatte. Sehr allgemein gesagt macht er ja nur eine texturelle Ersetzung.
http://de.wikibooks.org/wiki/C++-Programmierung:_Der_Präprozessor also eher nein
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.07.2007, 12:14 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


beschreibt nicht schreibt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.07.2007, 15:02 Uhr
~huhu
Gast



Zitat von ~tobi87:

Gibt es sowas auch ohne Pfad, also nur der Dateiname?


Schreib Dir doch 'ne Funktion, die Dir den Dateinamen holt.
z.B.:


C++:
char* Dateiname ()
{
    char* i   = __FILE__;
    char* tmp = __FILE__;
    
    for (; *i; i++)
        if (*i == '\\') tmp = i+1;
    return tmp;
}

int main()
{
   char* ptr = Dateiname();
   return 0;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.07.2007, 15:14 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da würde ich eher strrchr nehmen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.07.2007, 15:38 Uhr
~huhu
Gast



C++:
const char* Dateiname ()
{
    char* i   = __FILE__;
    char* tmp = __FILE__;
    
    for (; *i; i++)
        if (*i == '\\') tmp = i+1;
    return tmp;
}

int main()
{
   const char* ptr = Dateiname();
  
   return 0;
}


Sorry, mein Fehler: Der Dateiname ist const.

@FloSoft, strrchr() ist 'ne gute Alternative, müsste man aber auch wieder in einer
Schleife einsetzen, um den Dateinamen zu holen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.07.2007, 16:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nein, müsste man nicht, da strrchr das letzte vorkommen liefert.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.07.2007, 18:05 Uhr
~huhu
Gast



Zitat von FloSoft:
nein, müsste man nicht, da strrchr das letzte vorkommen liefert.


Dann kann man sich ja damit ein Makro basteln:


C++:
#include <stdio.h>
#include <string.h>

#define FILENAME !strrchr(__FILE__,(int)'\\')?__FILE__:strrchr(__FILE__,(int)'\\')+1

int main()
{
   printf ( FILENAME );
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.07.2007, 23:35 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Das solltest du dir ganz schnell wieder abgewöhnen und stattdessen eine Funktion anlegen wenn du es öfters brauchst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.07.2007, 01:40 Uhr
0xdeadbeef
Gott
(Operator)


Mit ner Funktion kommste da nicht wirklich weiter, weil das __FILE__-Makro ja zur Compilezeit ersetzt wird, also den Namen der Datei beinhaltet, in der es steht.

Der Vollständigheit halber erwähnenswert, es gibt in C/C++ eine relativ unbekannte Präprozessordirektive, #line. Wird benutzt wie folgt:

C++:
#line 12 // oder
#line 2 "dateiname.c"


...damit werden dann __LINE__ und __FILE__ quasi auf die entsprechenden Werte gesetzt. Codegeneratoren benutzen sowas häufig, z.B. flex und bison.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: