FileSystemWatcher i otwieranie plików

0

Witam,

Mam mały problem z FileSystemWatcher. Otóż mam postawiony serwer ftp który udostępnia 1 katalog do zapisu. Chciałbym monitorować ten katalog i przy zapisie jakiego kol wiek pliku graficznego otworzyć go i przetworzyć (przeskalować). I w czym problem ? Problem mam w tym że jak podepnę procedurę skalowania pod event FileSystemWatcher.Created to plik jest wciąż otwarty do zapisu. Jak przepne na changed z filtrem na wilkosc pliku to czasami plik moge odczytac czasami nie. Wymyślilem także procedure na czekanie na plik ... ale coś tu nie działa ...

do
            {
                try
                {
                    FileStream fileStream = new FileStream(e.FullPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
                    fileStream.Close();
                }
                catch (IOException ex)
                {
                    i++;
                    exceptionOccured = true;
                    System.Threading.Thread.Sleep(1000);
                    if (i == 15)
                    {
                        exceptionOccured = false;
                        eventLog1.WriteEntry("Can't read file: " + e.FullPath + "\n\nMessage: " + ex.Message + "\n\nSource: " + ex.Source + "\n\nStack trace:\n" + ex.StackTrace + "\n\nI: " + i.ToString(), EventLogEntryType.Error);
                    }
                }

Ma ktoś może jakiś pomysł jak to rozwiązać ?

0

a przypadkiem czy jakis inny program nie kozysta wlasnie z tego pliku i jest on w trybie 'lock'?

0

No właśnie wspomniany wcześniej proces ftp zapisuje plik podczas tego zdarzenia. I nie wiem jak "poczekać" aż on skończy zapisywać i wtedy dobrać sie do zawartości.

0

A może w zdarzeniu Create uruchamiaj watek z puli z podobnym kodem, ktory przedstawiles
bool falga_zamknieca=false;
while(!flaga_zamkniecia)
{
try
{
// otwarcie pliku ,operacje na nim zamkniecie
flaga_zamkniecia=true;
}
catch(IOException)
{
//np usypiac watek na 1 minute, i dac mu max 15 min na update pilku jezeli nie to watek przestaje dzialac i zapisuje do Loga ze nie udalo sie takiego pliku zapisac
}
}

wydaje mi sie ze takie rozwiazanie pozwoli Ci na odczekanie np. 15 minut na update pliku.

0

Jeszcze sprawdzę z osobnym wątkiem ... gdzie sam wątek będzie tworzony ... sprawdzał co i jak, raportował do wątku głównego i kończył się. Bo mam podejrzenie ze po otwarciu stream'a i wystąpieniu wyjątku jakimś cudem stream nie jest zamykany.

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