TurkProgrammers.NeT
Ana sayfa Ana Sayfa | Ana sayfanız yapın | Sık kullanılanlara ekle | Rss/Rdf Besleme| JavaScript
Bölümler
Arşiv
paz sa ça cu cum pa
12345
6789101112
13141516171819
20212223242526
272829

Mailinizi ekleyin
Haberlere abone olun:

anket: Sayfamızda En çok hangi bölüm ilginizi çekmekte
Sayfamızda En çok hangi bölüm yani programlama dili ve makaleleri ilginizi çekmekte?
PHP
C / C++ / C#
Asp ve .NET
JS / Ajax / DHTML /HTML
SQL
Visual Basic
Güvenlik
Action Script
Diğer
Anket sonuçları | Eski Anketler


email Arkadaşınızın maili | print Yazıcı versionu | comment Yanıtlar (0 Gönder)

Windows'ta FindFirstFile ve FindNextFile işlevleri

by mustafa bas on Temmuz 24,2007

image

Windows'ta FindFirstFile ve FindNextFile işlevlerini kullanarak özyinelemeli bir biçimde dizin ağacını dolaşan örnek bir program. Özyinelemeli işlev WalkTree fonksiyonudur. Bu işlev DirTree sarma fonksiyonu tarafından çağrılmaktadır. İşlevin her dosyayı buldukça parametreleri ile verilen bir fonksiyonu çağırdığına dikkat ediniz. Örnek programda bir .EXE dosya aranmış ve CreateProcess işleviyle çalıştırılmıştır.

#include 
#include 
#include 
#include 

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 == '')
      return;
   strcpy(correctPath, path);
   lastIndex = strlen(path) - 1;
   if (path[lastIndex] == '\' || path[lastIndex] == '/' || path[lastIndex] == ':')
      correctPath[lastIndex] = '';
   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: %dn", GetLastError());
}

int main(void)
{
   printf("Dosya: ");
   gets(g_szPath);
   strcat(g_szPath, ".exe");

   DirTree("d:\", Execute);

   return 0;
}

#endif

 


414 Kere okundu

Bu makaleyi beyendinizmi ?

1 2 3 4 5 Rating: 4.58Rating: 4.58Rating: 4.58Rating: 4.58Rating: 4.58 (Toplam 19 Oylar)
comment Yanıtlar (0 Gönder)
Çok okunanlar
En Çok Yorumlananlar
Yazarlar