مرحبا ,,,
-
تابع أكواد وأمثلة
-
-
الكود التالي لعملية بحث للملفات في كافة المجلدات ؟!
أولاً فائدة هذا الكود
1- سرعة رهيبة في البحث
2- الكود عبارة عن دالة واحدة - وهذا الشيء نادر للبحث في أكثر من مجلد
وفي النهاية الفكرة قابلة للتطوير- لأنها أصلاً مأخوذة ومطورة ( أكواد مايكروسفت) :
struct ENUMERATE_DIRECTORY_STACK {
LPSTR PathEnd;
HANDLE FindHandle;
};
struct ENUMERATE_DIRECTORY_STATE {
DWORD Depth;
CHAR Path[ MAX_PATH];
};
BOOL Findfn(HWND mhWnd)
{
struct ENUMERATE_DIRECTORY_STATE State;
struct ENUMERATE_DIRECTORY_STACK Stack[MAX_PATH];
WIN32_FIND_DATA FindFileData;
int ii=0;
///////
State.Depth = 0;
strcpy(State.Path,"C:\\");
// __try{
while (TRUE) {
startDirectorySearch:
if(ii>=MAX_PATH-1)
break;
Stack[ii].PathEnd = strchr( State.Path, '\0' );
if (Stack[ii].PathEnd > State.Path && Stack[ii].PathEnd[ -1 ] != '\\') {
*(Stack[ii].PathEnd)++ = '\\';
}
strcpy( Stack[ii].PathEnd, "*.*" );
Stack[ii].FindHandle = FindFirstFile( State.Path,
&FindFileData
);
if (Stack[ii].FindHandle != INVALID_HANDLE_VALUE) {
do {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
(!strcmp( FindFileData.cFileName, "." ) ||
!strcmp( FindFileData.cFileName, ".." )
)
) {
continue;
}
strcpy( Stack[ii].PathEnd, FindFileData.cFileName );
SetWindowText (hsw,State.Path);
SetWindowText (mhWnd,FindFileData.cFileName);
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
ii++;
State.Depth++;
goto startDirectorySearch;
restartDirectorySearch:;
}
}
while ( FindNextFile( Stack[ii].FindHandle, &FindFileData ) );
FindClose( Stack[ii].FindHandle );
}
if (!State.Depth)
break;
State.Depth--;
ii--;
goto restartDirectorySearch;
}
/* }__except (GetExceptionCode() ){
TCHAR err[300];
wsprintf(err,"Error in file: %s",State.Path);
MessageBox (NULL,err,NULL,MB_OK);
return 1;
}*/
SetWindowText (hsw,"");
SetWindowText (mhWnd,"");
MessageBox (mhWnd,"All files found... OK",
NULL,MB_OK|MB_ICONINFORMATION);
return 0;
}وللتوضيح أكثر
-
تجد البرنامج + الكود في الملف المرفق
-

