Advertisement
KonaJjr

SP_LV2_Zad2 (PreOrder)

Dec 8th, 2024 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.99 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. #define LARGE_FILE_SIZE (10 * 1024 * 1024) // 10 MB
  5.  
  6. // Globalne varijable za praćenje rezultata
  7. int largeFileCount = 0;
  8. FILETIME oldestFileTime;
  9. int oldestFileSet = 0;
  10. wchar_t oldestFileName[MAX_PATH];
  11.  
  12. // Funkcija za usporedbu datuma
  13. int compareFileTime(FILETIME ft1, FILETIME ft2) {
  14.     return (ft1.dwHighDateTime < ft2.dwHighDateTime) ||
  15.         (ft1.dwHighDateTime == ft2.dwHighDateTime && ft1.dwLowDateTime < ft2.dwLowDateTime);
  16. }
  17.  
  18. // Funkcija za obradu datoteke
  19. void processFile(const wchar_t* filePath, const WIN32_FIND_DATA* fileData) {
  20.     LARGE_INTEGER fileSize;
  21.     fileSize.LowPart = fileData->nFileSizeLow;
  22.     fileSize.HighPart = fileData->nFileSizeHigh;
  23.  
  24.     // Provjera je li datoteka "velika"
  25.     if (fileSize.QuadPart >= LARGE_FILE_SIZE) {
  26.         largeFileCount++;
  27.     }
  28.  
  29.     // Ažuriraj najstariji datum
  30.     if (!oldestFileSet || compareFileTime(fileData->ftCreationTime, oldestFileTime)) {
  31.         oldestFileTime = fileData->ftCreationTime;
  32.         wcscpy_s(oldestFileName, filePath);
  33.         oldestFileSet = 1;
  34.     }
  35. }
  36.  
  37. // Funkcija za preorder obilazak direktorija
  38. void traverseDirectoryPreorder(const wchar_t* directoryPath) {
  39.     WIN32_FIND_DATA findFileData;
  40.     HANDLE hFind;
  41.     wchar_t searchPath[MAX_PATH];
  42.  
  43.     // Kreiranje putanje za pretragu ("<direktorij>\*")
  44.     swprintf(searchPath, MAX_PATH, L"%s\\*", directoryPath);
  45.  
  46.     hFind = FindFirstFile(searchPath, &findFileData);
  47.     if (hFind == INVALID_HANDLE_VALUE) {
  48.         return; // Ako direktorij nije dostupan, izađi
  49.     }
  50.  
  51.     do {
  52.         // Preskoči "." i ".."
  53.         if (wcscmp(findFileData.cFileName, L".") == 0 || wcscmp(findFileData.cFileName, L"..") == 0) {
  54.             continue;
  55.         }
  56.  
  57.         wchar_t fullPath[MAX_PATH];
  58.         swprintf(fullPath, MAX_PATH, L"%s\\%s", directoryPath, findFileData.cFileName);
  59.  
  60.         if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
  61.             // Prvo obradi trenutni direktorij (preorder pristup)
  62.             traverseDirectoryPreorder(fullPath);
  63.         }
  64.         else {
  65.             // Obradi datoteku
  66.             processFile(fullPath, &findFileData);
  67.         }
  68.     } while (FindNextFile(hFind, &findFileData) != 0);
  69.  
  70.     FindClose(hFind);
  71. }
  72.  
  73. // Glavni program
  74. int wmain(int argc, wchar_t* argv[]) {
  75.     if (argc != 2) {
  76.         wprintf(L"Upotreba: %s <početni direktorij>\n", argv[0]);
  77.         return 1;
  78.     }
  79.  
  80.     // Pokreni preorder obilazak direktorija
  81.     traverseDirectoryPreorder(argv[1]);
  82.  
  83.     // Ispis rezultata
  84.     wprintf(L"Broj velikih datoteka (>= 10 MB): %d\n", largeFileCount);
  85.  
  86.     if (oldestFileSet) {
  87.         SYSTEMTIME st;
  88.         FileTimeToSystemTime(&oldestFileTime, &st);
  89.         wprintf(L"Najstarija datoteka: %s\n", oldestFileName);
  90.         wprintf(L"Datum najstarije datoteke: %02d.%02d.%04d.\n",
  91.             st.wDay, st.wMonth, st.wYear);
  92.     }
  93.     else {
  94.         wprintf(L"Nije pronađena niti jedna datoteka.\n");
  95.     }
  96.  
  97.     return 0;
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement