Kontrola wielodostępu do pliku

0

Zakładam tutaj, bo dla mnie to takie nietuzinkowe jest.
Chodzi o zrealizowanie we własnym projekcie funkcji takiej jaka jest np. w M$ Office. Mamy plik np. Worda na udziale sieciowym, gdy go otwieramy, to możemy edytować. Jeśli następna osoba z sieci chce go otworzyć pojawia się u niej komunikat, że plik jest już edytowany i pytanie, czy chce otworzyć tylko do odczytu lub czekać na możliwość edycji. Gdy pierwszy użytkownik skończy pracę to plik się zwolni, następny w kolejce otrzymuje prawo zapisu, i jest pytany, czy chce to zrobić.
Potrzebuję zaimplementować podobną funkcjonalność w swoim projekcie. Wymyśliłem, żeby tworzyć plik tymczasowy i w nim trzymać kolejkę chętnych użytkowników. Każdy użytkownik co jakiś czas aktualizuje w pliku swój wpis - to jest zabezpieczenie przed tym, aby użytkownik, który utracił kontakt z siecią nie zablokował kolejki. Tylko rodzi to pewne problemy - procesy z różnych komputerów mogą się "zderzać" na tym pliku i w efekcie nie dokonać wpisu, przez co użytkownik może wylecieć z niej zbyt wcześnie. Niby udało mi się to zsynchronizować, ale nie jestem do końca pewny słuszności takiego rozwiązania. Jest może jakieś lepsze wyjście? Coś np. z remotingiem? A jak myślicie, jak rozwiązał to M$?

Pozdrawiam i z góry dzięki.

0

O ile dobrze pamietam to Micro$oft nie zapisuje kolejki uzytkownikow w plikach tymczasowych. A moze sie myle? W sumie to trudno stwierdzic bo nasz ukochany monopolista nie udostepnia specyfikacji uzywanych plikow :(
Co do synchronizacji to daloby sie to zrobic dosc prosto:

  1. tworzysz plik tymczasowy z kolejka userow
  2. kazdy user otwiera taki plik w trybie "exclusive" tzn z flaga FILE_SHARE_READ (albo w ogóle z 0 w dwShareMode) w CreateFile (patrz: WinAPI help), modyfikuje swoj rekord i zamyka plik
  3. jesli nie da sie otworzyc pliku, a plik istnieje tzn, ze ktos go modyfikuje i trzeba poczekac (np Sleep, Timer lub watki)
    To takie proste rozwiazanie. Bardziej zaawansowane to SharePoint by Micro$oft ale to dziala na zasadzie serwera sieciowego i napisanie czegos takiego wymaga troche wiecej czasu...
0

Jak MS zrobił to sie raczej nie dowiemy, ale możliwe ze w openoffice'ie też jestkontrola wielodostępu do pliku i mozna sobie przejrzeć źródła i się dowiedzieć jak rozwiązali ten problem.

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