E
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