Path Name Prüfen...



  • Kritik: Man sollte in einer Funktion nicht Speicher allokieren, den man darin dann nicht mehr freigibt.

    Ich finde meine Funktionen eigentlich ganz gut. Was gibt's jetzt noch zu meckern? 🙄



  • Ist nicht von mir, habe ich irgendwie mit google gefunden.



  • Original erstellt von WebFritzi:
    **Kritik: Man sollte in einer Funktion nicht Speicher allokieren, den man darin dann nicht mehr freigibt.

    Ich finde meine Funktionen eigentlich ganz gut. Was gibt's jetzt noch zu meckern? 🙄**

    Wenn du darum bettelst:
    Man könnte die Existenz einer Datei auch mit CreateFile() überprüfen.
    Ist kürzer 😉



  • Und wennes sich um eien Exe handlet die gerade benutzt wird? Was lieferet CreateFile dann zurück? Doch auch INVALID_HANDLE oder?



  • Hm, jå, hast recht. 😉



  • Hmm, bäh, hast doch nicht recht. 😉



  • PathFileExists() 😛

    Unschlagbar 😃



  • Gibts bei mir auch nicht.



  • ...PathFileExists() geht aber erst am Win98 oder Win95 mit InternetExplorer 4.0



  • Naja, über die Einschränkung kann man wohl hinwegsehen.

    In der Statistik auf unserer HP (s.u. Link) hat keiner mehr eine Konfiguration mit der es nicht geht.



  • Original erstellt von WebFritzi:
    Gibts bei mir auch nicht.

    LOL



  • Wieso lachst du? Das war schon ernst gemeint. In meinem SDK ist diese Funktion nicht vorhanden.



  • Also ich habe die Funktion aber auch bei mir in der SDK. 😃
    Hast du vielleicht ne ältere Version, oder überhaupt kein MS Produkt?
    Also ich habe noch die 6.0 Autoren Version. 🙂



  • Original erstellt von WebFritzi:
    Wieso lachst du? Das war schon ernst gemeint. In meinem SDK ist diese Funktion nicht vorhanden.

    Das ist dann wohl pP.
    Du solltest mal updaten. 64Bit kommt ganz bestimmt 😉

    Mich würde die Version auch mal interessieren..



  • Nehmt noch Rücksicht auf Windows 95 User, jedenfalls bis 2004. Da beginnt ja die neue Windows Generation (.NET). Ab da kann man so langsam 95/98/ME und natürlich 3.11 und dessen Vorgänger 😃 vernachlässigen.



  • Wo kann ich die Version denn auslesen?



  • Nehmt noch Rücksicht auf Windows 95 User, jedenfalls bis 2004.

    Machen wir doch. Du mußt lediglich den IE updaten. Du bekommst doch auf einem frisch installierten 95er mit IE 1.00 noch nichtmal Deine Help-Files geöffnet, da ist dieser 'Aufwand' locker vertretbar.

    Die shlwapi.dll ist eine Fundgrube für viele praktische Funktionen. Da ist es fast eine Sünde, diese nicht zu benutzen.



  • hat eigentlich speziell nix mit WinAPI zu tun,

    Microsoft:
    _splitpath, _wsplitpath
    Break a path name into components.

    void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );

    void _wsplitpath( const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *fname, wchar_t *ext );

    Routine Required Header Compatibility
    _splitpath <stdlib.h> Win 95, Win NT
    _wsplitpath <stdlib.h> or <wchar.h> Win 95, Win NT

    For additional compatibility information, see Compatibility in the Introduction.

    Libraries

    LIBC.LIB Single thread static library, retail version
    LIBCMT.LIB Multithread static library, retail version
    MSVCRT.LIB Import library for MSVCRT.DLL, retail version

    Return Value
    None

    Parameters

    path
    Full path

    drive
    Optional drive letter, followed by a colon (:)

    dir
    Optional directory path, including trailing slash. Forward slashes ( / ), backslashes ( \ ), or both may be used.

    fname
    Base filename (no extension)

    ext
    Optional filename extension, including leading period (.)

    Remarks
    The _splitpath function breaks a path into its four components. _splitpath automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use. _wsplitpath is a wide-character version of _splitpath; the arguments to _wsplitpath are wide-character strings. These functions behave identically otherwise.

    Generic-Text Routine Mappings

    TCHAR.H Routine _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined
    _tsplitpath _splitpath _splitpath _wsplitpath

    Each argument is stored in a buffer; the manifest constants _MAX_DRIVE, _MAX_DIR, _MAX_FNAME, and _MAX_EXT (defined in STDLIB.H) specify the maximum size necessary for each buffer. The other arguments point to buffers used to store the path elements. After a call to _splitpath is executed, these arguments contain empty strings for components not found in path. You can pass a NULL pointer to _splitpath for any component you don‚t need.

    Borland:
    #include <dir.h>
    int fnsplit(const char *path, char *drive, char *dir, char *name, char *ext);
    int _wfnsplit(const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *name, wchar_t *ext );

    Beschreibung

    fnsplit übernimmt einen vollständigen Dateinamen (Parameter path) als String in der Form

    X:\DIR\SUBDIR\NAME.EXT

    und zerlegt path in seine vier Einzelkomponenten. Diese werden dann in den durch drive, dir, name und ext bezeichneten Strings gespeichert (Alle fünf Parameter müssen übergeben werden, einzelne davon dürfen aber NULL sein, was zur Folge hat, daß die zugehörige Komponente zwar analysiert, aber nicht gespeichert wird). Wenn eine Pfadkomponente NULL ist, dann gehört die Komponente zu einem leeren String, der nicht NULL ist.
    Die Maximalgrößen aller beteiligten Strings (inklusive des abschließenden Nullzeichen \0) sind durch die Konstanten MAXDRIVE, MAXDIR, MAXPATH, MAXFILE und MAXEXT in dir.h festgelegt.

    Konstante Max 16-bit Max 32-bit String

    MAXPATH 80 260 path
    MAXDRIVE 3 3 drive inklusive Doppelpunkt (:)
    MAXDIR 66 256 dir inklusive führendem und abschließendem umgekehrten Schrägstrich (\)
    MAXFILE 9 256 name
    MAXEXT 5 256 ext inklusive führendem Punkt (.)

    fnsplit unterstellt, daß die durch drive, dir, name und ext bezeichneten Strings eine ausreichende Größe haben, um jede Komponente zu speichern, die nicht NULL ist. fnsplit verteilt die Interpunktionszeichen aus path in folgender Weise:

    drive enthält den Laufwerksbezeichner mit einem Doppelpunkt (C:, A:, usw.);
    dir enthält den führenden und den abschließenden umgekehrten Schrägstrich (\BC4\INCLUDE\, \SOURCE\, usw.);
    name enthält den Dateinamen;
    ext enthält den Punkt, der die Namenserweiterung einleitet (.C, .EXE, usw.).

    fnmerge und fnsplit verhalten sich invers zueinander. Die Anwendung von fnmerge auf die durch fnsplit ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.

    Rückgabewert

    fnsplit liefert einen Integerwert zurück, der sich aus fünf in dir.h definierten Flags zusammensetzt. Ein gesetztes Flag zeigt an, daß die zugehörige Komponente in path vorhanden war. Folgende Flags sind in dir.h definiert:

    EXTENSION Eine Namenserweiterung
    FILENAME Ein Dateiname
    DIRECTORY Mindestens ein Verzeichnis
    DRIVE Ein Laufwerksbezeichner
    WILDCARDS Jokerzeichen (* und/oder ?)



  • Original erstellt von WebFritzi:
    Wo kann ich die Version denn auslesen?

    eigentlich müsste doch die Version auf der CD stehen, von der du es Installiert hast, oder Irre ich mich?



  • Wat für ne CD? Ich habe den BCB, und da ist das SDK, sowohl die Headers als auch die Help-Files, dabei. Die Version des BCB ist Ver 3, aber das ist ja egal. Also, wo kann ich die Versions No meines SDK auslesen?


Anmelden zum Antworten