Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 23060|Відповідь: 1

[Джерело] .net/c# багатопотокове рішення для читання файлів

[Копіювати посилання]
Опубліковано 11.10.2017 15: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, доступ до FileAccess, права Int32, булеві права useRights, FileShare share, Int32 bufferSize, опції FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   У System.IO.FileStream: ctor (Шлях до рядків, режим FileMode, доступ до FileAccess, ShareShare)
   У System.IO.File.Open (Шлях до рядків, режим FileMode, доступ до FileAccess)
   У ConsoleApp1.FileReadHelper.SingleFile(String path) location 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(булевий includeTaskCanceledExceptions)
   У System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   In 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 localFinal)
   У 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 localFinal)
   у System.Threading.Tasks.Parallel.ForEach[TSource](джерело IEnumerable'1, тіло Action'1)
   У ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) у локації C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: рядок номер 66
   У ConsoleApp1.Program.Main(String[] args) позиція C:\project\my\TestNet\ConsoleApp1\Program.cs: рядок номер 73
Будь ласка, натисніть будь-яку клавішу, щоб продовжити...




Помилка очевидна, тобто до файлу неможливо отримати доступ, його не можна прочитати, що є виключенням при багатопотоковій роботі

Я прочитав, як написано документ:

Я встановив лише режим читання, а не режим запису, і виявив, що при багатопотоковому режимі все одно буде помилка, хіба це не лише для читання?

Якщо це лише для читання, це не повинно бути помилкою

Рішення:



Це має бути читання файлів у режимі лише для читання, я перевірив і виявив, що це не помилка, і той самий файл можна читати одночасно в кількох потоках




Попередній:Посібник з одноклікової переустановки, асистент з установки, посібник з одноклікової переустановки системного асистента
Наступний:Операція читання файлів .net/c# для зчитування всіх рядків файлу пакетами
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com