Überpfüfen, ob Pfad schon vorhanden.



  • Hallo.

    Wie dann ich überpfüfen, ob ein Pfad schon exsistiert?
    Ich habe leider nichts brauchbares gefunden, da ich es in einer Konsolenanwendung schreibe.



  • Bist du sicher, daß C++/CLI deine Sprache ist?
    Bei deinem Problem hilft dir die entsprechende API deines Betriebssystems.



  • Mit der API das hatte ich auch schon gesehen, aber leider hat es nicht ganz gefunzt.

    Hast du einen Code für die WinAPI?





  • ok das hatte ich auch schon gefunden.

    BOOL DirectoryExists(LPCTSTR szPath)
    

    ok bool ist klar.
    aber wie bekomm ich jetzt einen LPCTSTR Ich habe den Pfad als String vorliegen. Wie kann ich den in einen LPCTSTR konvertieren?



  • Wenn Du wirklich in C++/CLI arbeitest, dann so...

    String^ _exists = "C:\\Program Files\\HP";
    
    if(IO::Directory::Exists(_exists) == true)
    {
    	Console::WriteLine("Der Pfad \"{0}\" existiert bereits.",_exists);
    }
    else
    {
    	Console::WriteLine("Der Pfad {0} existiert nicht.",_exists);
    }
    


  • Würd'st jetzt bitte endlich sagen ob C++/CLI oder C++!?

    #include <string>
    #include <iostream>
    
    #include <windows.h>
    
    bool DirectoryExists( std::string const &path )
    {
    	DWORD dwAttrib = GetFileAttributesA( path.c_str() );
    	return (dwAttrib != INVALID_FILE_ATTRIBUTES && ( dwAttrib & FILE_ATTRIBUTE_DIRECTORY ) );
    }
    
    int main()
    {
    	std::string path = "C:\\somwhere\\over\\the\\rainbow";
    
    	std::cout << "\"" << path << "\" " << ( DirectoryExists( path ) ? "exists" : "does not exist or is not accessible" ) << ".\n";
    }
    


  • Der Code

    if(System::IO::Directory::Exists(folderkon) == true)
    				{
    					cout<<"Der Pfadexistiert bereits.";
    				}
    				else
    				{
    					cout<<"Der Pfad existiert nicht.";
    				}
    

    würde funktionieren.

    Wie konvertiere ich jedoch meinen String in einen "String ^"? Geht das überhaupt?



  • Wofür?

    #include <iostream>
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
    	String ^path = "C:\\somwhere\\over\\the\\rainbow";
    
    	if( System::IO::Directory::Exists( path ) ) {
    
    		std::cout << "Der Pfadexistiert bereits.";
    
    	} else {
    
    		std::cout << "Der Pfad existiert nicht.";
    	}
    
    	std::cin.get();
    }
    


  • Du bist offensichtlich noch ein Anfänger. Ich kann dir nur von ganzem Herzen raten: Lass die Finger von C++/CLI. C++/CLI ist nicht was du denkst oder was du vielleicht denken gemacht wurdest. Insbesondere ist es nicht C++. Wenn du C++ lernen willst, lern C++ und mach dabei einen gaaaaanz weiten Bogen um C++/CLI.



  • Eigentlich wollte ich es auch ohne cli machen aber es geht nicht mit c++. Deswegen brauch ich nur den einen code. Den rest konnte ich bisher mit c++ mitteln lösen.



  • Crysis_02 schrieb:

    [..] aber es geht nicht mit c++.[...]

    Ist in den meisten Fällen eine unhaltbare Aussage. 😉
    Was genau willst Du?

    Wenn du herausfinden willst, ob ein Verzeichnis existiert bzw. du darauf zugreifen kannst steht der Code weiter oben.



  • Swordfish schrieb:

    Würd'st jetzt bitte endlich sagen ob C++/CLI oder C++!?

    #include <string>
    #include <iostream>
    
    #include <windows.h>
    
    bool DirectoryExists( std::string const &path )
    {
    	DWORD dwAttrib = GetFileAttributesA( path.c_str() );
    	return (dwAttrib != INVALID_FILE_ATTRIBUTES && ( dwAttrib & FILE_ATTRIBUTE_DIRECTORY ) );
    }
    
    int main()
    {
    	std::string path = "C:\\somwhere\\over\\the\\rainbow";
    
    	std::cout << "\"" << path << "\" " << ( DirectoryExists( path ) ? "exists" : "does not exist or is not accessible" ) << ".\n";
    }
    

    Meinst du den code?
    Aber was ist ein DWORD?



  • DWORD ist ein

    typedef long unsigned DWORD;
    

    Bekommst du gratis durch windows.h .

    Was geht jetzt nicht mit C++?



  • Crysis_02 schrieb:

    [...] aber es geht nicht mit c++.

    Also das nimmst du dir aber doch hoffentlich selbst nicht ab!? Oder glaubst du tatsächlich, dass es keinen Weg gibt, um in C++ herauszufinden, ob eine Datei bzw. ein Ordner existiert; noch dazu auf einem OS, das selbst in C++ geschrieben ist?



  • Glaub mir: Es ist besser für DIch, wenn es nur mit C# geht!



  • if (bool DirectoryExists(string const folder)==false)
    				{
    					foldererst = _mkdir (folder.c_str());
    					if (foldererst!=0)
    					{
    						cerr<<"Der Ordner konnte nicht erstellt werden. Bitte geben Sie einen vorhandenen Pfad an: ";
    						cin>>folder;
    						for(unsigned z = 0; z < folder.size(); ++z)
    						if(folder[z] == '/') folder.replace(z++,1, "\\");
    					}
    					else
    					{
    						cout<<"Ein neuer Ordner wurde erstellt."<<endl;
    					}
    				}
    

    diesen code habe ich jetzt.
    jedeoch ist mein problem, dass der compiler sagt:
    "1>rechner3.cpp(178): error C2143: Syntaxfehler: Es fehlt ',' vor '=='
    1>rechner3.cpp(179): error C2143: Syntaxfehler: Es fehlt ';' vor '{'"

    das wäre beides nun hier in zeile 1. was ist falsch?



  • Ähm, was genau soll das in Zeile 1 deiner Meinung nach sein!?

    Versteh mich nicht falsch, aber ich denk, du wärst wirklich am besten damit beraten, das hier erstmal bleiben zu lassen, dir ein ordentliches C++ Buch zu besorgen und es zu lesen. Falls du schon eines hast, dann spul zurück und schau dir die Dinge nochmal in Ruhe an. Obiger Code demonstriert klar und deutlich, dass die Grundlagen bei dir nicht wirklich sitzen und dir einfach nur bei deinem Problem zu helfen, würde dir vermutlich mehr schaden als nutzen...



  • der compiler mekert halt rum. ich versteh auch net was falsch sein soll -.-



  • Crysis_02 schrieb:

    ich versteh auch net was falsch sein soll -.-

    Und genau da liegt das Problem und genau darum solltest du dich erstmal sorgfältig mit den Grundlagen befassen. Was genau denkst du denn, dass diese Zeile Nr. 1 tun soll?


Log in to reply