Verzeichnis + Unterverzeichnis auslesen + kopieren



  • Hallo ich habe ein paar fragen, und zwar möchte ich ein Programm schreiben dass mir ein paar Dateien aus einem verzeichnis in ein anderes kopiert.
    So nun soll das Programm in diesem Ordner, den ich zum kopieren angebe, auch unterverzeichnisse incl, der Dateien die dann wieder in dem Unterverzeichnis sind (usw. egal wieviele unterverzeichnisse es sind) kopieren.

    Sprich z.B.:

    ich habe das verzeichnis:
    C:\Spiele\Kram\bla\bla\bla\bla4\neDatei.blaEndung

    nun sag ich meinem Prog, dass das zu kopierende Verzeichnis lautet:
    C:\Spiele

    so nun soll er alle Dateien aus Spiele, den Ordne Kram mit seinen Dateien, bla mit seinen Dateien etc..... kopieren.

    Wie stell ich das an, muss ich erst alle verzeichnisse und dateien in den verzeichnissen bzw. unterverzeichnissen scannen, mir die pfade merken und dann einzelnt kopieren, oder wie stell ich das an?

    dannge schonmal 🙂





  • So Danke erstmal für die Antwort 🙂 hat mich ziemlich weitergebracht.

    CStdioFile tempSave,tempSave2;
    	tempSave.Open(strPath+"\\IsFile.data",CStdioFile::modeCreate|CStdioFile::modeWrite,NULL);
    	tempSave2.Open(strPath+"\\IsDirectory.data",CStdioFile::modeCreate|CStdioFile::modeWrite,NULL);
    	CFileFind pFile;
    	BOOL bWorking = pFile.FindFile(str_SOURCE+"\\*.*");
    	while (bWorking) {
        bWorking = pFile.FindNextFile();
        if (!pFile.IsDirectory())
    	{
    		tempSave.WriteString(pFile.GetFileName());
    		tempSave.WriteString("\n");
    		if(CopyFile(pFile.GetFilePath(),str_DESTINATION+"\\"+pFile.GetFileName(),FALSE))
    			MessageBox("Kopiert!");
    		else
    			MessageBox("Nicht kopiert!");
    	}
    	else
    	{
    		if(!pFile.IsDots())
    		{
    		tempSave2.WriteString(pFile.GetFileName());
    		tempSave2.WriteString("\n");
    		CreateDirectory(str_DESTINATION+"\\"+pFile.GetFileName(),NULL);
    		}
    	}
    	}
    	tempSave.Close();
    	tempSave2.Close();
    

    So damit scanne ich nun ein Verzeichnis nach Directorys oder Files und speichere sie einfach mal in 2 verschiedene Dateien, zur Übersicht.

    So nun listete r mir auch alle Verzeichnisse auf etc, aber wie wscanne ich in diesen Verzeichnissen wieder nach unterverzeichnissen usw.

    Mir fehlt da einfach die Idee, kann mir einer helfen?

    €dit, habe den COde nochmal editiert, habe es jetzt hinbekommen, dass er Dateien kopiert und verzeichnisse demensprechend kopiert bzw. neu erstellt, leider gilt das nur für ein unterverzeichnis, tiefer geht er noch nicht 😕



  • void AddDirectories(LPCTSTR pszPath)
    {
        HANDLE hFind;
        WIN32_FIND_DATA fd;
    
        CString strPath = pszPath;
        if (strPath.Right (1) != _T ("\\"))
            strPath += _T ("\\");
        strPath += _T ("*.*");
    
        if ((hFind = ::FindFirstFile (strPath, &fd)) == INVALID_HANDLE_VALUE) {
            return;
        }
    
        do {
            if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                CString strComp = (LPCTSTR) &fd.cFileName;
                if ((strComp != _T (".")) && (strComp != _T (".."))) {
                    CString strNewPath = pszPath;
                    if (strNewPath.Right (1) != _T ("\\"))
                        strNewPath += _T ("\\");
    
                    AddDirectories(strNewPath);                
                }
            }
        } while (::FindNextFile (hFind, &fd));
    
        ::FindClose (hFind);
    }
    

    Ich würde es so machen. Ich denke, das die Rekursion hier dei einfachste Lösung ist.

    MFG
    Kai


Anmelden zum Antworten