Jak zarchiwizować plik w momencie zmiany tego pliku?

0

Witam

Generalnie koncept aplikacji jest taki aby otwierać do edycji plik Word (.doc) za pomocą aplikacji, z wykorzystaniem klasy Process, a następnie monitorować kiedy użytkownik zamknie MSWord i sprawdzić czy plik uległ zmianie by móc go zapić do archiwum. Monitoruje odpalony proces Word pod kątem jego zamknięcia (wykorzystuje zdarzenie Exited), a następnie sprawdzam czy plik uległ zmianie. Problem pojawia się w momencie otwarcia większej ilości dokumentów gdyż taka detekcja zadziała dopiero w momencie zamknięcia ostatniego dokumentu (proces Winword pomimo wielu otwartych osobno okien figuruje jako jeden proces z jednym identyfikatorem PID). Jak można by to rozwiązać inaczej aby wykrywać zamknięcie każdego okna MSWord a nie ostatniego zamykanego?

1

Czy to nie jest za duża kombinacja? A jak ktoś edytuje w Libre Writerze? :D Word z tego co kojarzę ma wbudowaną historię zmian. A nie można tych dokumentów wrzucić na Sharepoint czy inną usługę online, czy OneDrive, żeby użytkownicy korzystali z nich, nie z dysku, i tam się będzie archiwizowało?

0
SkrzydlatyWąż napisał(a):

Czy to nie jest za duża kombinacja? A jak ktoś edytuje w Libre Writerze? :D Word z tego co kojarzę ma wbudowaną historię zmian. A nie można tych dokumentów wrzucić na Sharepoint czy inną usługę online, czy OneDrive, żeby użytkownicy korzystali z nich, nie z dysku, i tam się będzie archiwizowało?

Kombinacja może i duża, ale tak to musi być. Docelowo archiwizowane będą tylko te pliki, które spełnią pewne kryteria zmian. Nie można użyć żadnych innych usług, ani edytorów typu Libre Writer.

4

Wygląda jak X/Y.

Jak rozumiem - użytkownik zmienia jakiś plik i zapisuje go. Zamyka worda. Ty chcesz nasłuchiwać na zamknięcie Worda, bo masz założenie że po zamknięciu worda, plik będzie zapisany, więc będziesz mógł go zarchiwizować. Dobrze rozumiem?

Bo jeśli tak, to po pierwsze: co jak user zapisze plik ale nie zamknie worda? Plik ma nie być zarchiwizowany? Pytanie drugie - co jak użytkownik zamknie worda "siłą", np przez task manager, i Word nie zdąży zapisać pliku - czy wtedy też ma nie być archiwizowany?

Dla mnie to wygląda, że Ty po prostu chcesz wykryć moment kiedy plik zmieni treść? A jeśli tak, to nie powinieneś słuchać na zamknięcie worda, tylko na zmiany w pliku. Jest coś takiego jak "file system watcher" pod windowsem, zobacz: https://learn.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher?view=net-8.0&redirectedfrom=MSDN

2

Faktycznie zastosowanie "file system watcher" rozwiązuje ten problem w możliwie najprostszy sposób. Poza tym nie muszę się też zastanawiać jaką aplikacją plik został otwarty. Czasami rozwiązania najprostsze i najlepsze zarazem są najmniej oczywiste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1