PathFileExists



  • Moin, mit PathFileExists kämpfe ich jetzt bereits eine Weile.
    Ich habe auch schon GetFileAttributes ausprobiert.
    Irgendwas verstehe ich nicht richtig....

    Ich übergebe zum prüfen die Datei "c:\\öffentlich.txt" bzw
    den Pfad "e:\\öffentlicher Dienst".
    Alles mit Umlauten erzeugt bei mir im code ein false.
    Also angeblich sind die Datei/der Pfad nicht da (sind aber angelegt).

    char* doesfileexist(char* thefile)
    	{
    
    //	return thefile;
    
    if(PathFileExists(thefile))
    {
    			return "ist da";
    		}else
    		{
    			return "nicht vorhanden";
    		}
    
    }
    




  • Da gibt es wohl Unstimmigkeiten bezüglich der Zeichenkodierung. Am besten du benutzt für Funktionen, welche Dateipfade benötigen, immer die *W - Funktionen, die wchar_t-strings haben möchten und für Unicode ausgelegt sind, anstatt die *A-Funktionen, die noch ANSI unterstützen. Insgesamt solltest du immer genau darüber nachdenken, ob du die *A oder *W - Funktionen benutzen möchtest, anstatt einfach die Funktionen ohne Suffix zu verwenden. Was diese Suffixe bedeuten, kannst du mal yahooen.
    Insgesamt solltest du dich mal mit Unicode in C++ auseinandersetzen, denn wchar_t selbst ist wiederum auch umstritten.



  • Hab nun rausgefunden, dass Extended ASCII offenbar nicht unterstütz ist
    😞



  • Das ist ja auch total obsolet.



  • Hi Techel, nochmal Danke für deine Unterstützung in diesem Thread.
    Ich hab so viele Beiträge und Dokus gelesen, dass mir der Kopf raucht 🙂

    Ich hab noch ganz viel nach zu holen und zu lernen.

    Was mir nicht in den Kopf gehen will ist aber, warum ich nirgends eine
    Lösung zum Thema gefunden habe. Vielleicht weil es hauptsächlich US
    Foren waren in denen ich geschaut habe. Die Amerikaner haben ja das Problem
    vermutlich weniger als wir? 😕

    Ich kam am Ende so weit, dass mir der Umlaut "ö" als  angezeigt wurde 🙄


  • Mod

    Wo ist Dein Problem?
    Nimm Unicode und vergiss alles andere.



  • #pragma comment( lib, "shlwapi.lib" )
    

    ...dann sollte funz !



  • ....oder

    #ifdef UNICODE  
    #define FUN_NAME _T("PathFileExistsW")  
    #else  
    #define FUN_NAME _T("PathFileExistsA")  
    #endif // !UNICODE  
    
    typedef BOOL (WINAPI *pPathFileExists)( LPCTSTR pszPath );  
    
    BOOL TestFolderExists( LPCTSTR lpszFullPath )  
    {  
    
        HMODULE hModule = LoadLibrary( _T("shlwapi.dll"));  
        pPathFileExists PathFileExists = (pPathFileExists)GetProcAddress( hModule, FUN_NAME );  
        if( !PathFileExists )  
        {  
            AfxMessageBox( _T("Failed to get function pointer" ));  
        }  
        if( PathFileExists( lpszFullPath ))  
        {  
            FreeLibrary( hModule );  
            // lpszFullPath exists  
            return TRUE;
        }  
        else  
        {  
            FreeLibrary( hModule );  
            // lpszFullPath dosent exists  
            return FALSE;
        }      
    
    }
    


  • Generell rate ich von der Benutzung des T()-Makros und von TCHAR ab. Das stiftet nur Verwirrung.


Log in to reply