Śledzenie zdarzeń na plikach tekstowych z poziomu eventów Windowsowych

0

Witam,
mam do przeanalizowania sekwencję zdarzeń, która ma miejsce na serwerze stfp gdzie klient wrzuca pliki do procesowania w teorii co 24 h o ustalonej porze.
Wygląda to tak - pod adresem 111.222.333/file znajdują się pliki, następie o godzinie X moja aplikacja zaczyna je procesować - tzn. wczytuje ich zawartość/kopiuje. Problem polega na tym, że czasami dostaję wyjątek w .NET, " HResult.. cannot access file because it's processed by another process.." (nie mogę z powodów technicznych przytoczyć całej treści)
Moje podejrzenie jest takie, że zewnętrzny program, którego używa klient do kopiowania plików co 24 h na ustaloną lokalizacje być może trzyma "uchwyt" do pliku, albo może nie wszystkie pliki zostają skopiowane poprawnie w całości (choć moja aplikacja na starcie sprawdza czy pliki już tam są.. i zawsze są..)
Sprawa jest dość ciężka, ale przedstawiłem jej pełny obraz. To czego potrzebuję to jakaś wiedza, wskazówka czy da się zrobić jakiś windowsowy monitor procesowanych plików. Wiem, że da się po jakichś eventach windowsowych wychwycić moment gdy plik zaczyna się kopiować, coś go zaczyna czytać, kończy kopiować itp. takie pełne logi bym potrzebował mieć zapięte w jakims monitorze na daną lokalizację sieciową. Zna ktoś z was cos takiego ?
Znam lockhuntera, ale on zawsze pokazuje, że plik nie jest "trzymany" przez żaden proces.(zarówno przed procesowaniem, w trakcie, jaki i po..)

1

nie prościej złapać wyjątek, i spróbować otworzyć plik za 5 minut i tak np. 10 razy a jak się nie uda to maila do siebie/wysyłającego, że coś nie tak?
BTW jeśli to jest windows to tu masz jak zobaczyć kto trzyma dany plik https://www.google.pl/search?q=windows+who+lock+file
BTW2 jeśli to jest wgrywane przez sftp to musisz mieć jakiś serwer - powinien mieć podgląd podłączonych klientów

0

Trochę mało czytelny opis problemu !
Bo ja z opisu to nie wiem czy problem jest z plikiem który jest lokalnie a ktoś przez stfp go modyfikuje na Twoim PC czy tez czytasz go zdalnie i wyjątek jest od usługi która serwuje pliki.
Obie strony ozywają sftp ?
Co robisz z plikiem ? Czytasz, kasujesz, zamazujesz ? W ktorym monecie jest wyjatek ?
Ewentualnie czy druga strona moze tworzyc dodatkowe pliki i np. tworzyc dodatkowy plik z jakims stanem operacji po "tamtej stronie" ?

0

Sytuacja jest prosta:

  1. jest katalog na serwerze stfp. do tej ściezki ma dostęp mój znajomy i ja (każdy ze swojego PC w jednej domenie)
  2. Na moim PC dział usługa Windowsowa, która wczytuje o godzinie X pliki które wrzuci znajomy. Tzn kopiuje je do podkatalogu i potem procesuje je tzn. czytam dane z plików txt i dalej wykorzystuje je w mojej aplikacji, koncze czytać dane i pliki przenosze do innego podkatalogu "Done". Kilka razy poleciał dziwny wyjątek , który nic nie mówi "cannot acces file beacuse it's use by another process" i tak się to skończyło- moja usługa Winowsowa padła po tym exceptionie. I nic ponadto nie wiem, stąd potrzebny pomysł na jakiś rozszerzony monitoring. (obecnie łapię wyjątki do pliku z logami)
0

no dobra ale dalej nie wiadomo które pliki, a dokładnie to w jakiej lokalizacji) są blokowane.

0

Ja bym spróbował po prostu otworzyć plik do zapisu (nie trzeba nic pisać), jak jest trzymany przez inny proces to poleci wyjątek, na tej podstawie można zrobić monitor.

try
{
    using (var stream = new FileStream(pathWithFileName, FileMode.Open, FileAccess.Write, FileShare.Write))
    {

    }
 }
catch
{
     // log
}

Przyjrzałbym się też czytaniom tego pliku, bo plik można też czytać nawet gdy jakiś proces trzyma na nim blokadę

var stream = new FileStream(mPathWithFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

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