System.IO.FileStream – třída
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
FileStream Pomocí třídy můžete číst, zapisovat do, otevírat a zavírat soubory v systému souborů a manipulovat s jinými popisovači operačního systému, včetně kanálů, standardního vstupu a standardního výstupu. K ReadCopyToWriteFlush provádění synchronních operací nebo WriteAsyncReadAsyncCopyToAsyncmetod a FlushAsync metod můžete použít asynchronní operace. Asynchronní metody slouží k provádění operací souborů náročných na prostředky bez blokování hlavního vlákna. Tento faktor výkonu je zvlášť důležitý v aplikaci pro Windows 8.x Store nebo desktopové aplikaci, kde časově náročná operace streamu může blokovat vlákno uživatelského rozhraní a zobrazit aplikaci, jako by nefungovala. FileStream vyrovnávací paměti vstup a výstup pro lepší výkon.
Důležité
Tento typ implementuje IDisposable rozhraní. Jakmile typ dokončíte, měli byste ho odstranit buď přímo, nebo nepřímo. Chcete-li odstranit typ přímo, zavolejte jeho Dispose metodu try
/catch
v bloku. Pokud ho chcete zlikvidovat nepřímo, použijte konstruktor jazyka, například using
(v jazyce C#) nebo Using
(v jazyce Visual Basic). Další informace naleznete v části Použití objektu, který implementuje IDisposable v IDisposable tématu rozhraní.
Vlastnost IsAsync zjistí, zda byl popisovač souboru otevřen asynchronně. Tuto hodnotu zadáte při vytvoření instance FileStream třídy pomocí konstruktoru, který má isAsync
, useAsync
nebo options
parametr. Pokud je true
tato vlastnost , stream využívá překrývající se vstupně-výstupní operace k asynchronnímu provádění operací se soubory. IsAsync Vlastnost však nemusí být true
volání ReadAsync, WriteAsyncnebo CopyToAsync metoda. IsAsync Pokud je false
vlastnost a voláte asynchronní operace čtení a zápisu, vlákno uživatelského rozhraní stále není blokováno, ale skutečná vstupně-výstupní operace se provádí synchronně.
Metoda Seek podporuje náhodný přístup k souborům. Seek umožňuje přesunutí pozice pro čtení a zápis do libovolné pozice v souboru. To se provádí pomocí parametrů referenčního bodu posunu bajtů. Posun bajtů je relativní vzhledem k referenčnímu bodu hledání, což může být začátek, aktuální pozice nebo konec podkladového souboru, jak znázorňují tři členové výčtu SeekOrigin .
Poznámka:
Diskové soubory vždy podporují náhodný přístup. V době výstavby CanSeek je hodnota vlastnosti nastavena true
nebo false
v závislosti na základním typu souboru. Pokud je základní typ souboru FILE_TYPE_DISK, jak je definováno v winbase.h, CanSeek hodnota vlastnosti je true
. CanSeek V opačném případě je false
hodnota vlastnosti .
Pokud se proces ukončí částí souboru uzamčeného nebo zavře soubor, který má nevyřízené zámky, chování není definováno.
Informace o operacích adresářů a dalších operacích se soubory naleznete v tématu File, Directorya Path třídy. Třída File je utility třída, která má statické metody primárně pro vytváření FileStream objektů na základě cest k souborům. Třída MemoryStream vytvoří datový proud z bajtového pole a je podobný FileStream třídě.
Seznam běžných operací se soubory a adresáři najdete v tématu Běžné vstupně-výstupní úlohy.
Detekce změn pozice datového proudu
FileStream Pokud objekt nemá výhradní blokování v popisovači, může jiné vlákno přistupovat k popisovači souboru souběžně a změnit umístění ukazatele souboru operačního systému, který je přidružený k popisovači souboru. V takovém případě může dojít k ohrožení umístění v mezipaměti v objektu FileStream a dat uložených v mezipaměti v vyrovnávací paměti. Objekt FileStream rutinně provádí kontroly metod, které přistupují do vyrovnávací paměti mezipaměti, aby se zajistilo, že pozice popisovače operačního systému je stejná jako pozice uložená v mezipaměti, kterou FileStream objekt používá.
Pokud je v volání Read metody zjištěna neočekávaná změna pozice popisovače, .NET zahodí obsah vyrovnávací paměti a znovu přečte stream ze souboru. To může mít vliv na výkon v závislosti na velikosti souboru a všech dalších procesech, které by mohly ovlivnit umístění datového proudu souborů.
Pokud je v volání metody zjištěna neočekávaná změna pozice popisovače Write , obsah vyrovnávací paměti se zahodí a IOException vyvolá se výjimka.
Objekt FileStream nebude mít výhradní blokování v popisovači, pokud SafeFileHandle je vlastnost přístupná k zveřejnění popisovače nebo FileStream objektu je udělena SafeFileHandle vlastnost v jeho konstruktoru.