Mam problem z działaniem na system plików, co doprowadza mnie do szału.. Plik FileSystemWatcher ulega awarii podczas zgłaszania wyjątku, plik throws jest używany dla przyszłych plików.
Okazuje się, że patrzę na nowych plików tekstowych w folderze, kiedy utworzono zdarzenie jest wywoływane, ja po prostu czytać to za pomocą następującego kodu:
string txtTemp = File.ReadAllText(MyFilePath);
potem przetwarzać dane w txtTemp ciąg, w zasadzie czytam to linie & przechowywać dane na DB, całkiem proste, prawda?
Problem jest, gdy wyjątek jest podniesione w tym procesie (powiedzmy połączenie db nie powiodło się), to nie ma znaczenia, czy ja go złapać, bo przez następne najbliższych plików aplikacja wygeneruje wyjątek mówiący
"Proces nie może uzyskać dostępu do pliku" theNewComingFile.txt ", ponieważ jest to używane przez inny proces."
Dlaczego nowy utworzony plik może być używany, jeśli nie został jeszcze otwarty lub odczytany? A aplikacja ciągle rzuca ten "proces nie ma dostępu do pliku" wyjątek dla wszystkich nowych plików.
Jedyną rzeczą, jaką możemy zrobić, to zamknąć i ponownie otworzyć aplikację, to resetuje aplikację i wszystko działa dobrze, dopóki znowu wyjątek jakiegokolwiek rodzaju jest wskrzeszeni> (ojej!)
Jakieś pomysły? jakiekolwiek obejście? jakieś pomysły? jakieś sugestie ... cokolwiek? hehehehe =)
Dzięki, kolesie !!
Czy możliwe jest skonfigurowanie innego FileSystemWatchera w przypadku wyjątku i obaj ścigają się z tym samym plikiem? Czy mógłbyś opublikować swój kod obsługi zdarzenia, a także kod instalacyjny FileSystemWatcher? – zmbq
Więcej kodu byłoby pomocne – jtm001
['File.ReadAllText()'] (http://msdn.microsoft.com/en-us/library/ms143368.aspx): "Otwiera plik tekstowy, odczytuje wszystkie wiersze pliku , **, a następnie zamyka plik **. ". Nie powinno to nastąpić, dopóki wyjątek nie zostanie podniesiony z tego miejsca. Nie możesz wypróbować StreamReadera, aby przeczytać plik? – CodeCaster