Ανεπίλυτη εξαίρεση: System.AggregateException: Έχουν προκύψει ένα ή περισσότερα σφάλματα. ---> System.IO.IOException: Το αρχείο "C:\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat" χρησιμοποιείται από άλλη διεργασία, επομένως δεν είναι δυνατή η πρόσβαση σε αυτό το αρχείο. στο System.IO.__Error.WinIOError(Int32 errorCode; String maybeFullPath) Στο System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, Συμβολοσειρά msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) Στο System.IO.FileStream: ctor(Διαδρομή συμβολοσειράς, Λειτουργία FileMode, Πρόσβαση FileAccess, Κοινή χρήση FileShare) Στο System.IO.File.Open (Διαδρομή συμβολοσειράς, λειτουργία FileMode, πρόσβαση FileAccess) Στη θέση ConsoleApp1.FileReadHelper.SingleFile(Διαδρομή συμβολοσειράς) C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: αριθμός γραμμής 27 Στο ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(Συμβολοσειρά x) Θέση C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: Αριθμός γραμμής 68 Στο System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1() Στο System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) Στο System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Αντικείμενο) --- Τέλος της εσωτερικής --- ανίχνευσης στοίβας εξαιρέσεων Στο System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) Στο System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) Στο System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localΤέλος) Στο System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable'1 source, ParallelOptions, Action'1 body, Action'2 bodyWithState, Action'3 bodyWithStateAndIndex, Func'4 bodyWithStateAndLocal, Func'5 bodyWithEverything, Func'1 localInit, Action'1 localΤέλος) στο System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 πηγή, Action'1 σώμα) Στο ConsoleApp1.FileReadHelper.MultipleFilesAsync(διαδρομή IEnumerable'1) στη θέση C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: αριθμός γραμμής 66 Στο ConsoleApp1.Program.Main(String[] args) θέση C:\project\my\TestNet\ConsoleApp1\Program.cs: αριθμός γραμμής 73 Πατήστε οποιοδήποτε πλήκτρο για να συνεχίσετε. . . .
Το σφάλμα είναι προφανές, δηλαδή, δεν είναι δυνατή η πρόσβαση στο αρχείο, το αρχείο δεν μπορεί να διαβαστεί, κάτι που αποτελεί εξαίρεση στο multithreading
Διάβασα πώς είναι γραμμένο το έγγραφο:
Ρύθμισα μόνο τη λειτουργία ανάγνωσης, όχι τη λειτουργία εγγραφής, και διαπίστωσα ότι στο multi-threading, θα εξακολουθεί να υπάρχει σφάλμα, δεν είναι μόνο για ανάγνωση;
Εάν είναι μόνο για ανάγνωση, δεν θα πρέπει να είναι σφάλμα
Λύση:
Αυτό θα πρέπει να διαβάζει αρχεία σε λειτουργία μόνο για ανάγνωση, να το δοκιμάζει και να διαπιστώνει ότι δεν είναι σφάλμα και ότι το ίδιο αρχείο μπορεί να διαβαστεί ταυτόχρονα σε πολλά νήματα
|