Anzahl Dateien in einem Verzeichnis



  • Hab noch mal ne Frage, wie bekomme ich die Anzahl der Dateien (z.B, *.doc) aus einem Verzeichnis. Muss ich das CFindFile durchlaufen lassen, oder gibt es da einen besseren Befehl?



  • ne, gibts IMHO net.

    Devil



  • 😕 IMHO ???? 😕



  • IMHO = in my humble Opinion

    Devil

    [ Dieser Beitrag wurde am 13.12.2002 um 18:58 Uhr von devil81 editiert. ]



  • IMHO: siehe Member-Variable m_lNumFiles

    ////////////////////////////
    // Verzeichnisse Kopieren //
    ////////////////////////////
    
    long CVerzeichnisKopierenDlg::SnapshotFiles(CString pstrSourcePath)
    {
        BOOL bMore;
        WIN32_FIND_DATA wfd;
        HANDLE handle;
        CString szMask;
        CString szFullName;
    
        szMask = pstrSourcePath + "\\*.*";  //Suchmaske für FindFirstFile
    
        handle = ::FindFirstFile(szMask, &wfd);
        bMore = handle != INVALID_HANDLE_VALUE;
    
        while(bMore)
        {
            if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                if( ((strcmp(wfd.cFileName, ".")  != 0) && 
                     (strcmp(wfd.cFileName, "..") != 0)) )      // filename is a directory
                {
                    szFullName = pstrSourcePath + "\\" + wfd.cFileName;
                    SnapshotFiles(szFullName);  //Funktion rekursiv aufrufen
                }/*if*/
            }/*if*/
    
            else
            {
                CString SourceFile = pstrSourcePath + "\\" + wfd.cFileName;
                m_lNumFiles++;
    
                MSG msg;
                int Return = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
                if (Return!=0)
                {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
            }/*else*/
    
            bMore = ::FindNextFile(handle,&wfd);
    
        }/*while*/
    
        if (handle!=INVALID_HANDLE_VALUE) ::FindClose(handle);
    
        return m_lNumFiles;
    }////////////////////Ende Member-Funktion 
    
    BOOL CVerzeichnisKopierenDlg::XcopyFiles(CString pstrSourcePath, CString pstrTargetPath, long m_lNumFiles)
    {
        BOOL bMore;
        WIN32_FIND_DATA wfd;
        HANDLE handle;
        CString szMask;
        CString szFullName;
        CString szTargetName;
    
        m_ctlButton_Stop.EnableWindow(TRUE);
    
        CreateDirectory(pstrTargetPath, NULL);  //Zielverzeichnis erstellen
        szMask = pstrSourcePath + "\\*.*";      //Suchmaske für FindFirstFile
    
        handle = ::FindFirstFile(szMask, &wfd);
        bMore = handle != INVALID_HANDLE_VALUE;
    
        while(bMore&&(m_bIsKilled!=TRUE))
        {
            if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                if( ((strcmp(wfd.cFileName, ".")  != 0) && 
                     (strcmp(wfd.cFileName, "..") != 0)) )      // filename is a directory
                {
                    szFullName = pstrSourcePath + "\\" + wfd.cFileName;
                    szTargetName = pstrTargetPath + "\\" + wfd.cFileName;
                    CreateDirectory(szTargetName, NULL);        //Ziel-Unterverzeichnisse erstellen
                    m_ctlStaticDirectory.SetWindowText(szFullName); //Verzeichnis anzeigen
                    m_ctlListBox.AddString(szFullName);         //Verzeichnis in Liste zufügen
                    UpdateWindow();                             //Aktualiserung der ListBox
                    XcopyFiles(szFullName, szTargetName, m_lNumFiles ); //Funktion rekursiv aufrufen
                }/*if*/
            }/*if*/
    
            else
            {
                CString SourceFile = pstrSourcePath + "\\" + wfd.cFileName;
                CString TargetFile = pstrTargetPath + "\\" + wfd.cFileName;
                m_ctlStaticFile.SetWindowText(wfd.cFileName);
                ::CopyFile(SourceFile, TargetFile, TRUE);   //Datei wird kopiert, 
                                                            //TRUE:  File wird nicht überschrieben
                                                            //FALSE: File wird überschrieben
    
                MSG msg;
                int Return;
                Return = PeekMessage( &msg, NULL, 0, 0, PM_REMOVE);
                if (Return!=0)
                {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
    
                //  Prozentanteil kopierter Dateien, lNumFiles entspricht 100%.                            
                m_lZaehler++;
                m_iProzent = (int) ( m_lZaehler*100 / m_lNumFiles );
    
                CString string;
                string.Format( "%i", m_iProzent );  m_ctlStaticProzent.SetWindowText( string );
                string.Format( "%i", m_lZaehler);   m_ctlStaticNumberFiles.SetWindowText( string );
    
            }/*else*/
    
            bMore = ::FindNextFile(handle,&wfd);
    
        }/*while*/
    
        if (handle!=INVALID_HANDLE_VALUE) ::FindClose(handle);
    
        return TRUE;
    }////////////////////Ende Member-Funktion
    

Anmelden zum Antworten