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