Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 23060|Απάντηση: 1

[Πηγή] .NET/C# Λύση αρχείου πολλαπλών νημάτων μόνο για ανάγνωση

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 11/10/2017 3:06:48 μ.μ. | | | |
Ανεπίλυτη εξαίρεση: 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, θα εξακολουθεί να υπάρχει σφάλμα, δεν είναι μόνο για ανάγνωση;

Εάν είναι μόνο για ανάγνωση, δεν θα πρέπει να είναι σφάλμα

Λύση:



Αυτό θα πρέπει να διαβάζει αρχεία σε λειτουργία μόνο για ανάγνωση, να το δοκιμάζει και να διαπιστώνει ότι δεν είναι σφάλμα και ότι το ίδιο αρχείο μπορεί να διαβαστεί ταυτόχρονα σε πολλά νήματα




Προηγούμενος:Οδηγός επανεγκατάστασης με ένα κλικ βοηθός εγκατάστασης Οδηγός επανεγκατάστασης με ένα κλικ του βοηθού συστήματος
Επόμενος:Λειτουργία ανάγνωσης αρχείου .net/c# για ανάγνωση όλων των σειρών του αρχείου σε παρτίδες
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com