Advertisement
KonaJjr

SP_LV2Zad2 (PostOrder)

Dec 8th, 2024
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.08 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 postorder obilazak direktorija
  38. void traverseDirectoryPostorder(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 poddirektorije (postorder pristup)
  62.             traverseDirectoryPostorder(fullPath);
  63.         }
  64.         else {
  65.             // Obradi datoteku
  66.             processFile(fullPath, &findFileData);
  67.         }
  68.     } while (FindNextFile(hFind, &findFileData) != 0);
  69.  
  70.     // Nakon obrade svih poddirektorija, obradi trenutni direktorij (postorder pristup)
  71.     FindClose(hFind);
  72. }
  73.  
  74. // Glavni program
  75. int wmain(int argc, wchar_t* argv[]) {
  76.     if (argc != 2) {
  77.         wprintf(L"Upotreba: %s <početni direktorij>\n", argv[0]);
  78.         return 1;
  79.     }
  80.  
  81.     // Pokreni postorder obilazak direktorija
  82.     traverseDirectoryPostorder(argv[1]);
  83.  
  84.     // Ispis rezultata
  85.     wprintf(L"Broj velikih datoteka (>= 10 MB): %d\n", largeFileCount);
  86.  
  87.     if (oldestFileSet) {
  88.         SYSTEMTIME st;
  89.         FileTimeToSystemTime(&oldestFileTime, &st);
  90.         wprintf(L"Najstarija datoteka: %s\n", oldestFileName);
  91.         wprintf(L"Datum najstarije datoteke: %02d.%02d.%04d.\n",
  92.             st.wDay, st.wMonth, st.wYear);
  93.     }
  94.     else {
  95.         wprintf(L"Nije pronađena niti jedna datoteka.\n");
  96.     }
  97.  
  98.     return 0;
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement