処理されていない例外:System.AggregateException:1つ以上のエラーが発生しました。 ---> 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(String path、FileMode mode、FileAccess access、Int32 権利、ブール useRights、FileShare share、Int32 bufferSize、FileOptions options、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath、Boolean checkHost) System.IO.FileStreamでは: ctor(文字列パス、ファイルモードモード、ファイルアクセスアクセス、ファイルシェア共有) System.IO.File.Open(文字列パス、ファイルモードモード、ファイルアクセスアクセス) 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 In 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ミリ秒タイムアウト、キャンセルトークンcancellationToken) System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, int32 to Exclusive, ParallelOptions parallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localfinal) System.Threading.Task.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) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 ソース、Action'1 ボディ) ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path)の場所C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs:行番号66 At ConsoleApp1.Program.Main(String[] args) 位置 C:\project\my\TestNet\ConsoleApp1\Program.cs: line number 73 続行するにはどのキーでもお願いします...
エラーは明白で、ファイルにアクセスできず、読み取れず、マルチスレッド時に例外として発生します
私はその文書の書き方を読みました:
書き込みモードではなく読み取りモードだけを設定しましたが、マルチスレッドでもエラーが出ることがわかりました。読み取り専用ではありませんか?
読み取り専用であればエラーではないはずです
解決:
これは読み取り専用モードでファイルを読み込むべきで、テストしたところエラーではなく、同じファイルを複数のスレッドで同時に読み取れることがわかりました
|