Необработанное исключение: 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 Пожалуйста, нажмите любую клавишу, чтобы продолжить...
Ошибка очевидна: файл не может быть доступен, его нельзя прочитать, что является исключением, брошенным при многопоточности
Я прочитал, как написан документ:
Я установил только режим чтения, а не режим записи, и обнаружил, что при многопоточности ошибка всё равно появляется, разве это не только для чтения?
Если это только для чтения, ошибка не должна быть
Решение:
Это должно быть чтение файлов в режиме только для чтения, я проверил и обнаружил, что ошибка нет, и один и тот же файл можно читать одновременно в нескольких потоках
|