Exemplo n.º 1
0
void MsgWaitForWorkingQueue(long* plWorkingItemCount, long lMaxWorkingItemCount, DWORD dwCheckInterval)
{
	while(*plWorkingItemCount > lMaxWorkingItemCount)
		WaitWithMessageLoop(dwCheckInterval);
}
Exemplo n.º 2
0
int __stdcall isCopyFile( FileCopyCallback_t callback, wchar_t *PathOut, wchar_t *PathIn, BOOL bInnerFolders )
{	
	wchar_t TempDir[ _MAX_PATH ] = {0};
	__int64 mCopySize = 0;
	FILE *mFileOut;		// Из
	FILE *mFileIn;		// В
	int PolKilo = 1024 * 512;
	wchar_t *TempBuf;
	size_t result;

	mCopy = TRUE;

	FileList = ( FileList_t * )FileList_Init();

	TempBuf = ( wchar_t * )malloc( PolKilo );
	SizePathOut = wcslen( PathOut );
	mbInnerFolders = bInnerFolders;
	wcscpy( mPathOut, PathOut );

	// Ищем файлы
	SECURITY_ATTRIBUTES sa;
	ZeroMemory (&sa, sizeof(sa));
	sa.nLength = sizeof(sa);
	sa.bInheritHandle = TRUE;
	sa.lpSecurityDescriptor = NULL;
	hEvent = CreateEvent (&sa, false, false, NULL);
	hThread = CreateThread (&sa, NULL, SearchThread, NULL, NULL, &thID);

	WaitWithMessageLoop( &hEvent );

	CloseHandle( hEvent );
	CloseHandle( hThread );

	if( !mCopy )
	{
		free( TempBuf );
		FileList_Free( FileList );
		return 0;
	}

	FileList->AllSize = FileList->AllSize / 1024 ;

	callback( "allsize", ( int )FileList->AllSize, "" );

	// Создаем папку
	CreateDirectoryTree( PathIn );

	// Создаем подпапки
	for( int i = 0; i < FileList->NumDir; ++i )
	{
		wsprintf( TempDir, L"%s\\%s", PathIn, FileList->mPath[ i ] );		
		CreateDirectoryTree( TempDir );
	}

	for( int z = 0; z < FileList->NumFiles; ++z )
	{
		if( !mCopy )
			break;

		// Создаем файл в "конечной" папке
		if( bInnerFolders )
			wsprintf( TempDir, L"%s\\%s", PathIn, FileList->Files[ z ] + SizePathOut - 1 );
		else
			wsprintf( TempDir, L"%s\\%s", PathIn, GetFileName( FileList->Files[ z ] ) );
		mFileIn = _wfopen( TempDir, L"wb" );
		if( mFileIn == NULL )
			break;

		callback( "filename", 0, convertUnicode( FileList->Files[ z ] ) );

		// Открываем исходный файл
		mFileOut = _wfopen( FileList->Files[ z ], L"rb" );
		if( mFileIn == NULL )
			break;

		while( !feof( mFileOut ) && mCopy )
		{
			result = fread( TempBuf, 1, PolKilo, mFileOut );
			if( ferror( mFileOut ) )
			{
				ErrorExit( L"fread" );
				fclose( mFileOut );
				fclose( mFileIn );
				continue;
			}

			mCopySize += result;

			fwrite( TempBuf, 1, result, mFileIn );
			if( ferror( mFileIn ) )
			{				
				ErrorExit( L"fread" );
				fclose( mFileOut );
				fclose( mFileIn );
				continue;
			}
			callback( "write", mCopySize / 1024, "" );
		}

		fclose( mFileOut );
		fclose( mFileIn );
	}
	free( TempBuf );

	FileList_Free( FileList );
	return 1;
}