Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 23060|Resposta: 1

[Fonte] Solução de arquivo somente leitura multithread .net/c#

[Copiar link]
Publicado em 11/10/2017 15:06:48 | | | |
Exceção não tratada: System.AggregateException: Um ou mais erros ocorreram. ---> System.IO.IOException: O arquivo "C:\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat" está sendo usado por outro processo, então este arquivo não pode ser acessado.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   No System.IO.FileStream.Init(String path, modo FileMode, acesso FileAccess, direitos Int32, Boolean useRights, compartilhamento FileShare, Int32 bufferSize, opções FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   No System.IO.FileStream: ctor(String path, modo FileMode, acesso FileAccess, compartilhamento FileShare)
   No System.IO.File.Open(String path, modo FileMode, acesso FileAccess)
   Em ConsoleApp1.FileReadHelper.SingleFile(String path) localização C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: linha número 27
   Em ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(String x) Posição C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: Linha número 68
   Em System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1()
   Em System.Threading.Tasks.Task.InnerInvokeWithArg(TaskChildTask)
   Em System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Objeto)
   --- Fim do traço interno da pilha de exceções ---
   Em System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   Em System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   Em System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 paraExclusive, ParallelOptions, parallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localFinally)
   Em System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable'1 source, ParallelOptions, Action'1 body, Action'2 bodyWithState, Action'3 corpoWithStateAndIndex, Func'4 bodyWithStateAndLocal, Func'5 bodyWithEverything, Func'1 localInit, Action'1 localFinally)
   em System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 fonte, corpo Action'1)
   No ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) no local C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: linha número 66
   Em ConsoleApp1.Program.Main(String[] args) posição C:\project\my\TestNet\ConsoleApp1\Program.cs: linha número 73
Por favor, pressione qualquer tecla para continuar...




O erro é óbvio, ou seja, o arquivo não pode ser acessado, o arquivo não pode ser lido, o que é uma exceção sob multithreading

Li como o documento está escrito:

Só defini o modo de leitura, não o modo de escrita, e percebi que no modo multithreading, ainda haverá um erro, não é só leitura?

Se for somente leitura, não deve ser um erro

Solução:



Isso deveria estar lendo arquivos em modo somente leitura, testei e descobriu que não é um erro, e que o mesmo arquivo pode ser lido ao mesmo tempo em múltiplas threads




Anterior:Assistente de instalação tutorial de reinstalação com um clique Guia de reinstalação com um clique do assistente de sistema
Próximo:Operação de leitura .net/c# para ler todas as linhas do arquivo em lotes
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com