Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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" используется другим процессом, поэтому доступ к этому файлу недоступен.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   В System.IO.FileStream.Init (Путь строки, режим FileMode, доступ к FileAccess, права Int32, булевые права использования, Share, Int32 bufferSize, опции FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, булевый bFromProxy, булевый useLongPath, Boolean checkHost)
   В System.IO.FileStream: ctor (Путь строк, режим FileMode, доступ к FileAccess, ShareShare)
   В System.IO.File.Open (Путь к строке, режим FileMode, доступ к FileAccess)
   В ConsoleApp1.FileReadHelper.SingleFile(String path) расположение 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()
   In 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 source, Action'1 body)
   В 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