serezo Yönetici
Ruh Hali : Mesaj Sayısı : 952 Rep Puanı : 13131 Teşekkür Aldı : 0 Kayıt tarihi : 29/10/09 Nerden : Kocaeli/Gebze İş/Hobiler : MEsaj atmak :D Lakap : Sezo
| Konu: Sistem Programlama ve İleri C Uygulamaları Salı Ara. 08, 2009 5:08 pm | |
| Windows Altında Dizin Ağacını Dolaşan Örnek Program (Sistem Programlama ve İleri C Uygulamaları) Açıklama: Windows'ta FindFirstFile ve FindNextFile fonksiyonlarını kullanarak özyinelemeli bir biçimde dizin ağacını dolaşan örnek bir program. Özyinelemeli fonksiyon WalkTree fonksiyonudur. Bu fonksiyon DirTree sarma fonksiyonu tarafından çağrılmaktadır. Fonksiyonun her dosyayı buldukça parametreleri ile verilen bir fonksiyonu çağırdığına dikkat ediniz. Örnek programda bir .EXE dosya aranmış ve CreateProcess fonksiyonuyla çalıştırılmıştır. Kaynak Kod:
- Kod:
-
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
void WalkTree(const char *path, void (*Proc) (char *)) { char szSearchPath[MAX_PATH], szNextFile[MAX_PATH]; BOOL result = TRUE; WIN32_FIND_DATA finfo; HANDLE hDir;
sprintf(szSearchPath, "%s\\*.*", path); hDir = FindFirstFile(szSearchPath, &finfo); if (hDir == INVALID_HANDLE_VALUE) return; while (result) { if (!strcmp(finfo.cFileName, ".")) { FindNextFile(hDir, &finfo); result = FindNextFile(hDir, &finfo); continue; } sprintf(szNextFile, "%s\\%s", path, finfo.cFileName); Proc(szNextFile); if (finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) WalkTree(szNextFile, Proc); result = FindNextFile(hDir, &finfo); } FindClose(hDir); }
void DirTree(const char *path, void (*Proc) (char *)) { char correctPath[MAX_PATH]; int lastIndex;
if (*path == '\0') return; strcpy(correctPath, path); lastIndex = strlen(path) - 1; if (path[lastIndex] == '\\' || path[lastIndex] == '/' || path[lastIndex] == ':') correctPath[lastIndex] = '\0'; WalkTree(correctPath, Proc); }
#if 1
char g_szPath[MAX_PATH];
BOOL CmpPath(const char *path) { char *pStr = strrchr(path, '\\');
return stricmp(pStr + 1, g_szPath) == 0; }
void Execute(char *path) { STARTUPINFO si = {sizeof(STARTUPINFO)}; PROCESS_INFORMATION pi;
if (!CmpPath(path)) return; if (CreateProcess(NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &si, π)) { CloseHandle(pi.hProcess); exit(0); } else fprintf(stderr, "Cannot create process: %d\n", GetLastError()); }
int main(void) { printf("Dosya: "); gets(g_szPath); strcat(g_szPath, ".exe");
DirTree("d:\\", Execute);
return 0; }
#endif | |
|