Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 23060|Odpověď: 1

[Zdroj] .NET/C# řešení pro více vlákn pouze pro čtení

[Kopírovat odkaz]
Zveřejněno 11.10.2017 15:06:48 | | | |
Neupravená výjimka: System.AggregateException: Došlo k jedné nebo více chybám. ---> System.IO.IOException: Soubor "C:\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat" je používán jiným procesem, takže k tomuto souboru nelze přistupovat.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   V System.IO.FileStream.Init(Cesta řetězce, režim FileMode, přístup k Souboru, práva Int32, Booleovská useRights, sdílené dílo souborů, Int32 bufferSize, možnosti Souboru SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   V System.IO.FileStream: ctor(Cesta k řetězci, režim FileMode, přístup k FileAccess, sdílení FileShare)
   V System.IO.File.Open (Cesta řetězce, režim FileMode, přístup k FileAccess)
   Na adrese ConsoleApp1.FileReadHelper.SingleFile(String path) C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: řádek číslo 27
   V ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(String x) Pozice C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: Řádek číslo 68
   V System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1()
   In System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   V System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Objekt)
   --- Konec interního stopového stopování výjimek ---
   In System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   In 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 localFinally)
   In 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 localTFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 source, Action'1 body)
   In ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) na místě C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: řádek číslo 66
   Na ConsoleApp1.Program.Main(String[] args) pozice C:\project\my\TestNet\ConsoleApp1\Program.cs: řádek číslo 73
Pro pokračování stiskněte prosím jakoukoli klávesu...




Chyba je zřejmá, tedy soubor nelze přečíst, nelze ho přečíst, což je výjimka v rámci multithreadingu

Četl jsem, jak je dokument napsán:

Nastavil jsem jen režim čtení, ne zápis, a zjistil jsem, že i při vícevláknovém režimu se chyba stále objeví, není to jen pro čtení?

Pokud je pouze pro čtení, neměla by to být chyba

Řešení:



Mělo by to být čtení souborů pouze pro čtení, otestoval jsem to a zjistil, že to není chyba, a stejný soubor lze číst současně pod více vlákny




Předchozí:Jedním kliknutím návod na instalaci asistenta Jedním kliknutím průvodce přeinstalací systémového asistenta
Další:.NET/C# Operace čtení souboru pro čtení všech řádků souboru v dávkách
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com