Przygotowywałem ostatnio dla klienta soft, którego zadaniem było pobieranie i wyświetlanie (z opcjami filtrowania) plików CSV generowanych przez aplikacje pilnujące produkcji.
Zadanie dość banalne, nie mniej jednak pojawił się drobny problem – nowy plik CSV tworzony jest jedynie po zmianie asortymentu na maszynie co nie zdarza się mimo wszystko tak bardzo często, a użytkownik chce mieć dostęp do wszystkich zarejestrowanych danych. Istnieje w związku z tym spore niebezpieczeństwo, że pojawi się klasyczny problem potrzeby jednoczesnego dostępu do pliku zarówno przez soft zapisujący jak i odczytujący.
Z pomocą przychodzi tutaj wykorzystanie klasy FileStream – koniecznie zarówno w aplikacji odczytującej jak i zapisującej. Możemy tutaj zdefiniować parametry blokowania otwartego przez nas pliku dla innych aplikacji próbujących tego samego.
Przykład jest w VB.net. Co prawda na codzień używam bardziej C# ale w tym projekcie są akurat takie wymagania klienta.
Dim iStream = New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Strumień z przykładu sparametryzowany jest do odczytu ale zezwalając na odczyt i zapis innym. Taki strumień możemy potem np. użyć jako parametr dla StreamReader-a
Dim sr As StreamReader = New StreamReader(iStream, System.Text.Encoding.UTF8)
Szczegóły dostępnych opcji inicjalizacji obiektu klasy FileStream są oczywiście na MSDN
http://msdn.microsoft.com/pl-pl/library/system.io.filestream(v=vs.110).aspx