Ist Pfad local



  • boost file system ist nicht...

    ich denke das diese hier sinn macht:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx



  • intern schrieb:

    boost file system ist nicht...

    ...ist nicht was? Gut genug? schnell genug? klein genug? möglich? essbar?

    intern schrieb:

    ich denke das diese hier sinn macht:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx

    Darf man daraus schließen, dass du unter Windows programmierst?

    Edit:

    boost::filesystem::path p("dein Pfad");
    bool local = p.is_relative();
    


  • boost filesystem darf ich leider nicht von der firma aus nehmen.. hab schon gefragt aber die meinten nur da gäbs auch was von windows api.. muss ich selber schaun.

    ja ich programiere mit für windows.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • sorry für die verwendung des falschen forums.

    habt ihr noch eine idee das besser umzusetzen?





  • also mit GetDriveType gehts schonmal nicht, ich bekomm immer den wert 1 zurück... jetzt schau ich mir mal das andere an...

    😞



  • vielen dank für eure hilfe,
    es funktioniert mit PathIsNetworkPath
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb773640.aspx

    sehr gut und macht genau das was ich möchte 🙂

    interessant wäre jetzt noch ob es da auch so eine einfache möglichkeit gibt, den ordner dann zu löschen...
    ich hab schonmal so was ähnliches implementiert aber ohne diese ordner und das war dann sehr viel code.

    gibt es da zufällig auch so eine funktion? ich find da nämlich auch wieder nix. es ist echt schlimm wenn man die ganzen funktionen nicht kennt



  • Alternative hätte man auch einfach prüfen können, ob nach dem ersten Zeichen ein ':\' folgt.



  • Naja, es is dann eigentlich doch ein bissl komplizierter als das: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx 😉



  • hab ein problem und bekomms nicht hin... probiere schon ewig rum da gibts sicher nen trick

    struct _finddata_t c_file;
    struct _finddate_t *ptrc_file;
    long hFile;
    CString suchdir = _T("*.*");
    suchdir.Insert(0,m_strDefaultDirectory);
    
    hFile = _findfirst(suchdir, &c_file )
    

    findfirst macht er jetzt nicht weil er ein problem mit dem suchdir hat...
    error C2664: '_findfirst64i32': Konvertierung des Parameters 1 von 'CString' in 'const char *' nicht möglich

    habt ihr ne idee? hab alles probiert _T(suchdir) geht auch nicht TEXT(suchdir) auch nicht LPTCSTR davor casten geht auch nicht...



  • insert schrieb:

    hab alles probiert _T(suchdir) geht auch nicht TEXT(suchdir) auch nicht LPTCSTR davor casten geht auch nicht...

    lololo geh grundlagen lernen!





  • lololo schrieb:

    insert schrieb:

    hab alles probiert _T(suchdir) geht auch nicht TEXT(suchdir) auch nicht LPTCSTR davor casten geht auch nicht...

    lololo geh grundlagen lernen!

    Du bist ja nett... dich braucht das Forum... Klasse antwort das hilft mir super. Danke ::(

    Hat jemand ne gscheide Antwort wie ich den cstring da rein bekomm?



  • internal schrieb:

    Hat jemand ne gscheide Antwort wie ich den cstring da rein bekomm?

    Ja, Grundlagen lernen! Und plötzlich geht alles wie von alleine! Und du musst uns auch gar nicht mehr mit sowas banalem nerven!



  • Was geht denn mit dir ab.. omg

    Ist es dir nüchtern möglich zu sagen wie es geht?



  • also ich hab mir jetzt das mit den strings ein wenig angeschaut und ausprobiert..

    es geht einfach nicht..

    int sizeOfString = (suchdir.GetLength()+1);
    	LPTSTR lpsz = new TCHAR[sizeOfString];
    	_tcscpy_s(lpsz, sizeOfString, suchdir);
    
    hFile = _findfirst(lpsz, &c_file ))
    

    könnte mir nicht jemand ein paar tips geben wie ich das denn machen soll, damit es funktioniert? ich bekomms nicht gebacken und es ist sicher nur ne kleinigkeit



  • hallo nochmal,

    ich hab jetzt ewig rumprobiert und hab jetzt die Funktion FindFirstFile() genommen, dort kann ich einfach einen cstring verwenden.

    jetzt hab ich aber die nächste konvertierungshürde

    remove((m_strDefaultDirectory+_T("\\")+FindFileData.cFileName)); // geht nicht error C2664: 'std::remove': Konvertierung des Parameters 1 von 'ATL::CStringT<BaseType,StringTraits>' in 'const char *' nicht möglich
    
    RemoveDirectory((m_strDefaultDirectory+_T("\\")+FindFileData.cFileName)); // funktioniert sehr wohl
    

    kann mir bitte jemand helfen, ich weiß nicht wo ich diese konvertierungsgrundlagne lernen soll.ich lern eigentlich nur durch probieren und anwenden. in der fh hatten wir sowas noch nie. hier haben wir immer nur komische pattern programmiert...



  • noch etwas

    remove((m_strDefaultDirectory+"\\"+FindFileData.cFileName));
    // hier bekomm ich keinen compiler fehler aber er löscht mir die ordner nicht...
    

    ich werde noch verrückt mit den konvertierungen, CString, string, char, const char* da checkt doch keiner mehr durch und ich weiß auch nicht wie ich das lernen soll. hab sehr lang gegoogelt und kollegen gefragt die sind sich da meist auch nciht so sicher. kann mir jemand bitte helfen?



  • So ganz unrecht hatte der "Grundlagen lernen"-Typ nicht.
    Ich versuchs mal.
    Ein char ist ein 8-bit signed int (außer wenn du im C-Forum bist).
    Den ersten 128 Werten des chars wird per ASCII-Encoding (www.asciitable.com) ein Zeichen zugeordnet. Ein einzelnes Zeichen macht noch keinen String, deshalb brauchst du mehrere, ein char * bietet sich an, der auf eine Reihe von chars zeigt. Das ist der C-Style mit Strings umzugehen. Die WinAPI besteht aus C-Funktionen, also funktioniert das.
    Nun gibt ein char nur 256 Zeichen her. Das heißt chinesisch ist nicht und schon Umlaute sind nicht portabel. Daher hat Windows eine Art UTF16 eingeführt und dazu gleich wchar_t. Das ist dasselbe wie ein char, nur halt mit 16 Bit und 64k Werten. Dementsprechend gibt es ein wchar_t * um einen String zu bauen. Nun gibt es sowas wie char *s = "Hallo" schon. Für wchar_t benutzt man wchar_t *ws = L"Hallo". Dann gibt es noch TCHAR und _T("Hallo"), das sind nur Macros, die zwischen der char und der wchar_t-Variante wechseln, je nachdem ob Unicode eingestellt ist.
    Ein string ist eine Klasse aus der C++-Bibliothek. Benutzt intern chars. Die WinAPI kann kein C++ und kann daher mit string-Klassen auch nichts anfangen. Es gibt die MFC, die die WinAPI in Klassen steckt. Wenn du nun aber einen string s hast, kannst du einfach s = "hallo" benutzen und dann mit s.c_str() auf den char * zugreifen, den Windows versteht. wstring ist dasselbe, nur mit wchar_t intern. Warum Windows kein tstring definiert ist mir unklar, aber man würde einfach sowas schreiben:

    #ifdef _UNICODE
    #define tstring wstring
    #else
    #define tstring string
    #endif
    

    Die WinAPI-Funktionen verstehen sowohl chars als auch wchar_ts. Man muss ihnen aber sagen, welches man benutzt. Es gibt FindFirstFileA für ASCII = char *, dann gibt es FindFirstFileW für wchar_t *, dann gibt es FindFirstFile das je nach Unicode-Einstellung als FindFirstFileA oder FindFirstFileW definiert wird.
    Ich habe keinen Plan was ein CStringT ist.
    Dann gibt es da noch Arrays von chars (char s[100] = "Hallo";), was kompatibel mit char * ist (Ein Array hat zusätzlich die Länge, die bei Umwandlung in einen Pointer weggeschmissen wird. Andersrum gehts nicht, aus einen char * kann man kein char[] machen, da die Länge weg ist und man sie auch nicht manuell angeben kann).
    Und zuletzt das nette const, dass da sagt, dass die Daten, auf die der const Pointer zeigt, nicht verändert werden sollen.
    Beispiel: strcpy(char *, const char 😉 kopiert ein String in einen anderen. Der erste String wird überschrieben, kann also nicht const sein. Von dem zweiten String wird nur gelesen, der kann also const sein. Man kann als ersten Parameter keinen const char * übergeben, da dann strcpy nicht mehr weiß, was es tun soll. Man kann aber sehr wohl einen char * als zweiten Parameter übergeben. strcpy überschreibt den String der gelesen wird nicht, obwohl er dürfte, aber das ist kein Problem.

    Nächstes: String Operationen

    char *s = "Hallo";
    s[2] = 'o'; //crash
    

    "Hallo" ist eine Konstante, die nicht überschrieben werden kann und s zeigt nur auf "Hallo".

    char s[100] = "Hallo";
    s[2] = 'o'; //funktioniert
    

    "Hallo" ist eine Konstante, s ist ein Array von 100 chars, in dem am Anfang "Hallo" drin steht, und dieses Array kann man verändern.

    char *s = "Hallo";
    char *s2 = "du";
    char *s3 = s + " " + s2; //völliger schwachsinn
    

    Mit s + " " würden zwei Pointer addiert werden, die dann irgendwo hin zeigen. Das ist so großer Schwachsinn, dass es in C und C++ nicht erlaubt ist.

    char *s = "Hallo";
    char *s2 = "du";
    char s3[100];
    sprintf(s3, "%s %s", s, s2); //so gehts richtig
    

    Klassen in C++ überladen ihre Operatoren. Es ist auch in C++ Quatsch Pointer oder Objekte zu addieren, daher treten Funktionen an die Stelle.

    string s = "Hallo";
    s += " du"; //Funktionsaufruf!!!
    

    Du solltes rausfinden was ein CStringT ist und wir man daraus einen char * oder wchar_t * macht, dann funktioniert auch dein Code.

    Ich hoffe das hilft für den Anfang.


Anmelden zum Antworten