code zu lang!!! O.o



  • Das hat ja mit C++ nichts zu tun. Dein Problem liegt in der Umsetzung mit der WinApi. Ich würde mich übrigens auch nicht wundern, wenn der Java-Code einfach nur die Aufrufe gekapselt hat.



  • TROLLLL ! ??



  • char *src = (char*)(path.c_str()); 
    LPCWSTR lpszsrc = (LPCWSTR)src;
    

    Was soll denn das? Das ist komplett falsch!
    c_str() gibt einen const char* zurück und kann nicht als char* benutzt werden.

    Ausserdem fehlt nach dem Aufruf von FindFirstFile(..) die Prüfung des Rückgabewertes (handle).

    Falls Du zwischen Unicode / Multibyte Strings konvertieren musst:
    http://www.c-plusplus.net/forum/276277
    http://www.c-plusplus.net/forum/260205-10

    Jedoch geht das bei Dir auch ohne:
    Verwende doch std::wstring, wenn Du Unicode benutzen möchtest - oder ein andere vernünftige Lösung.



  • vector<string> listFolder( string Path ) {
    	vector<string> Files;
    	for ( directory_iterator i(Path); i!=directory_iterator(); ++i )
    		if ( is_regular( i->status() ) )
    			Files.push_back( i->path().filename() );
    		else {
    			vector<string> NextFiles = listFolder( Path + "/" + i->path().filename() );
    			Files.insert( Files.end(), NextFiles.begin(), NextFiles.end() );
    		}
    	return Files;
    }
    

    Mit

    #include <boost/filesystem.hpp>
    #include <vector>
    #include <string>
    using namespace std;
    using namespace boost::filesystem;
    


  • theta schrieb:

    char *src = (char*)(path.c_str()); 
    LPCWSTR lpszsrc = (LPCWSTR)src;
    

    Was soll denn das? Das ist komplett falsch!
    c_str() gibt einen const char* zurück und kann nicht als char* benutzt werden.

    Ausserdem fehlt nach dem Aufruf von FindFirstFile(..) die Prüfung des Rückgabewertes (handle).

    Falls Du zwischen Unicode / Multibyte Strings konvertieren musst:
    http://www.c-plusplus.net/forum/276277
    http://www.c-plusplus.net/forum/260205-10

    Jedoch geht das bei Dir auch ohne:
    Verwende doch std::wstring, wenn Du Unicode benutzen möchtest - oder ein andere vernünftige Lösung.

    naja er wandelt es ja in ein const ptr wieder um,...

    ansonsten:

    typedef const wchar_t* LPCWSTR; 
    //<----
    std::wstring Path;
    
    LPCWSTR lpszsrc = path.c_str(); 
    //std::wstring::c_str .. const wchar_t* std::basic_string<wchar_t,,std::char_traits<wchar_t>,std::allocator<wchar_t> >::c_str(void) const
    


  • ganz großes danke @ fdfdfdsadf

    Das schaut echt top aus!!! 🙂

    theta schrieb:

    Was soll denn das? Das ist komplett falsch!

    komplett falsch, würde ich jetzt nicht sagen,
    sonst hätte es vermutlich nicht funktioniert.

    Anti Troll 2011 schrieb:

    TROLLLL ! ??

    Wie manche Leute sich immer gleich in
    ihrer Existenz bedroht fühlen 😃

    Ich wollte einfach wissen, wie man das Ganze professioneller lösen kann.
    Danke noch mal für eure Hilfe.



  • komplett falsch, würde ich jetzt nicht sagen,
    sonst hätte es vermutlich nicht funktioniert.

    Oh doch...komplett falsch. Und nur weil es gerade ohne sichtbaren Fehler läuft heisst das noch lange nicht, dass es korrekt ist.



  • I accept your challenge. Prepare to die! Muahaha! Chicken Scheme:

    (use srfi-1 posix)
    
    (define (getAll dir)
        (append-map
          (lambda (x) (if (directory? x) (getAll (directory x)) (list x)))
          dir))
    
    call: (getAll (list (current-directory)))
    


  • u die first

    BASH schrieb:

    $(ls -R)



  • @ competitor
    ?????

    #include<iostream>
    
    int main()
    {
        System("$(ls -R)")
        return 0;
    }
    


  • super!!!

    main.bat

    dir /s *.* > contents.txt
    

    sogar gleich in eine txt gespeichert...
    BOOOAH 😃



  • h0000h0h0000 schrieb:

    @ competitor
    ?????

    #include<iostream>
    
    int main()
    {
        System("$(ls -R)")
        return 0;
    }
    

    Das bringt dir bloß nichts. Nachdem dein System-Befehl abgearbeitet ist, wird deine Shell geschlossen und das Ergebnis ist weg. Du musst den Befehl schon noch in einem BASH-Script auswerten. Oder die Ausgabe in deine Anwendung pipen.



  • Da hier sowieso jeder irgendwas postet,
    mal eine nette Lösung in C# 🙂

    static void Main(string[] args){
    
                    DirectoryInfo di = new DirectoryInfo(path);
                    FileSystemInfo[] dirs = di.GetDirectories();
    
                    foreach (DirectoryInfo diNext in dirs){
                        FileSystemInfo[] files = diNext.GetFiles();
    
                        foreach (FileSystemInfo fiNext in files)
                            Console.WriteLine(fiNext.Name);
                    }}
    


  • Wo speicherst du die Dateien in eine Liste um sie weiter verarbeiten zu koennen?



  • knivil schrieb:

    Wo speicherst du die Dateien in eine Liste um sie weiter verarbeiten zu koennen?

    stimmt! Habe keine Liste, aber theoretisch muss man ja nur
    die Console.WriteLine Zeile ersetzen. 🙂



  • Hier mit Liste und dem Inhalt von allen Unterordnern 🙂

    public static List<FileSystemInfo> ListContents(String path)
            {
                List<FileSystemInfo> contents = new List<FileSystemInfo>();
    
                DirectoryInfo di = new DirectoryInfo(path);
                FileSystemInfo[] files = di.GetFiles();
    
                contents.AddRange(files);
    
                FileSystemInfo[] dirs = di.GetDirectories();
    
                foreach (DirectoryInfo diNext in dirs)
                    contents.AddRange(ListContents(diNext.FullName));
    
                return contents;
            }
    

Anmelden zum Antworten