• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Jak porównywać stany plików? (opis)

Object Storage Arubacloud
0 głosów
306 wizyt
pytanie zadane 19 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam! Stworzyłem trywialny program który (jeśli dany pendrive jest "dostępny") uruchamia z pendrive plik. Czyli w skrócie, wkładam pena do portu a program to wykrywa i uruchamia odpowiedni plik z niego. Jest to akurat kopia zapasowa. Teraz chcę przerobić ten programu, na pełnoprawną kopię zapasową. Tylko problem jest taki, że zaraz po skopiowania odpowiednich plików wychodzę z programu, chciałbym, żeby program zapisywał stan ików. Co jakiś czas ma on zostać zapisany i sprawdzony. Czyli coś w stylu

If(GetLastFilesStatus()!=GetCurrentFileStatus()){
    SaveCurrentFilesStatus();
    CopyFiles("Path","Path");
}

jak można coś takiego zrobić?

komentarz 19 lutego 2018 przez Piotr Wilk Nowicjusz (200 p.)
Co to za biblioteka?
1
komentarz 19 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
To nie żadna biblioteka :D. Napisałem to tak dla zobrazowania.

Jest jedynie funkcja CopyFile z windows.h

CopyFile(from, to, error if exists);

Czyli

CopyFile("C:\a.txt", "C:\tmp\a_cpy.txt", true);

1 odpowiedź

+1 głos
odpowiedź 19 lutego 2018 przez draghan VIP (106,230 p.)
wybrane 19 lutego 2018 przez Hiskiel
 
Najlepsza
Najprościej chyba porównywać czas modyfikacji pliku źródłowego i docelowego.
komentarz 19 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Da się tak z folderem? Teraz nie mam czasu sprawdzić i nie mam dostępu do kompa.
komentarz 19 lutego 2018 przez draghan VIP (106,230 p.)
Tak, powinno to być możliwe. Nie napisałeś nic odnośnie systemu operacyjnego ani systemu plików, więc na 100% Ci nie potwierdzę. :)
komentarz 19 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Chodzi o windows. Do linuxa czy MacOS mi nie spieszno. Dzięki za odpowiedź, byłobyto najbardziej efektywne i najszybsze.
komentarz 19 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Do amatorskiej zabawy, wystarczy porównanie czasów. Jeśli jednak weźmiesz pod uwagę możliwe przestawienie czasu (zima/wiosna), lepiej jest zapisać w archiwum backupu stempel czasowy.
komentarz 19 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
"W archiwum backupu stempel czasowy". O co chodzi? Tak wgl co by miało to przesunięcie? Jeśli godzina się zmieni, to się zmieni. Będzie z każdą zmianą inna. Chyba, że o czymś nie wiem..
komentarz 19 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Co do stempla, np. mały plik z informacją o której godzinie wykonano backup.

Czas albo przesuwamy do przodu albo cofamy. Co stanie się jeśli przed lub po wykonasz backup? Został zrobiony? Został zrobiony 2 razy? Nie został zrobiony? ... Przemyśl...
komentarz 19 lutego 2018 przez draghan VIP (106,230 p.)
Wystarczy, że czas modyfikacji pliku źródłowego i docelowego jest inny. Oznacza to, że w stosunku do pliku zapasowego zaszła zmiana, robimy backup i cześć. A jeśli w systemie zmieni się czas na letni / zimowy, to... nie odegra to żadnej roli przy takim mechanizmie.
komentarz 19 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)

Nie wiem czy takie coś jest dobre, ale po prostu będę sprawdzał czas modyfikacji danego folderu (jest to akurat folder z projektami cpp, z ktorego pliki chciałem kopiować na pena) (u mnie po prostu Cpp) i zapisywał w jakiejś zmiennej (po wcześniejszym wyciągnięciu samego czasu, nie daty) i potem porównywał z aktualnym czasem (oczywiście po "wyciągnięciu" i sparsowaniu go) który będzie w zmiennej. Potem aktualny czas idzie to starego czasu, aktualny do nowego...

while(1){
    string CurrentTime = GCFMT() //GetCurrentFileModificationTime
    if(LastTime.compare(CurrentTime)!=0){
    //Kopiowanie pliku, seria ifów itd
    LastTime=CurrentTime;
    }
    Sleep(5000);
}

Nie potrafię tłumaczyć, kod powinien wszystko wyjaśnić.

 

komentarz 19 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Ma. Możesz mieć taki sam czas a dane się zmieniły. Tak... to "szczególarstwo" ale jeśli miało by zabraknąć kluczowego pliku, to nie chciał bym takiego systemu backupu.

Jak powiedziałem.. do zabaw wystarcza takie założenie jakie poczyniłeś. Bez backupów różnicowych i przyrostowych, czasów kreacji, modyfikacji i dostępu do pliku.
komentarz 20 lutego 2018 przez draghan VIP (106,230 p.)

Masz całkowitą rację, morkowski. Wczoraj miałem jakieś zaćmienie umysłu i nie rozpatrzyłem tego warunku, a jedynie odwrotny - dane się nie zmieniają, a czas tak. Heh. laugh

komentarz 20 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
No, tylko że moja teoria poszła się walić. Mam sobie folder Cpp, w którym są foldery z projektami, w których są pliki cpp. Kiedy z modyfikuje plik cpp, to folder z projektem też się zmienia (w sensie, czas modyfikacji się zmienia), ale ten "główny" folder Cpp się nie zmienia.
komentarz 20 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Do takich zabaw jest już "kombajn" który nazywa się rsync. Poszukaj informacji o tym jak to skonfigurować. Serwer może kopiować pliki poprzez sieć do wspólnego repozytorium. Oczywiście rozwiązań jest jeszcze więcej.

Podobne pytania

0 głosów
1 odpowiedź 498 wizyt
0 głosów
1 odpowiedź 219 wizyt
pytanie zadane 6 grudnia 2017 w PHP przez DaltooN Początkujący (430 p.)
+2 głosów
3 odpowiedzi 655 wizyt
pytanie zadane 13 kwietnia 2015 w C i C++ przez 97kos Obywatel (1,390 p.)

92,539 zapytań

141,382 odpowiedzi

319,479 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...