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, useAsyncnebo options parametr. Pokud je truetato 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 falsehodnota 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.