Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Systémy souborů podporované systémem Windows používají koncept souborů a adresářů pro přístup k datům uloženým na disku nebo zařízení. Vývojáři Windows, kteří pracují s rozhraními API systému Windows pro vstupně-výstupní operace souborů a zařízení, by měli rozumět pravidlům, konvencím a omezením názvů souborů a adresářů.
K datům je možné přistupovat z disků, zařízení a síťových sdílených složek pomocí rozhraní API pro vstupně-výstupní operace souborů. Soubory a adresáře spolu s obory názvů jsou součástí konceptu cesty, což je řetězcová reprezentace místa pro získání dat bez ohledu na to, jestli se jedná o disk nebo zařízení nebo síťové připojení pro konkrétní operaci.
Některé systémy souborů, jako je NTFS, podporují propojené soubory a adresáře, které také dodržují zásady vytváření názvů souborů a pravidla stejně jako běžný soubor nebo adresář. Další informace najdete v tématu pevné odkazy a spojení a spojovací body a operace se soubory.
Další informace o konfiguraci Systému Windows pro podporu dlouhých cest k souborům najdete v tématu Omezení maximální délky cesty.
Názvy souborů a adresářů
Všechny systémy souborů se řídí stejnými obecnými konvencemi pojmenování jednotlivých souborů: základní název souboru a volitelná přípona oddělená tečkou. Každý systém souborů, například NTFS, CDFS, exFAT, UDFS, FAT a FAT32, ale může mít specifická a odlišná pravidla týkající se tvorby jednotlivých komponent v cestě k adresáři nebo souboru. Všimněte si, že adresář je jednoduše soubor se speciálním atributem, který ho navrhuje jako adresář, ale jinak musí dodržovat všechna stejná pravidla pojmenování jako běžný soubor. Vzhledem k tomu, že termín adresář jednoduše označuje zvláštní typ souboru z pohledu systému souborů, některé referenční materiály použijí obecný termín soubor, aby zahrnuly jak koncept adresářů, tak datových souborů. Z tohoto důvodu, pokud není uvedeno jinak, by se veškerá pravidla pojmenování nebo použití, nebo příklady pro soubor, měla vztahovat také na adresář. Termín cesta zahrnuje jeden nebo více adresářů, zpětná lomítka a případně název svazku. Další informace najdete v části Cesty.
Omezení počtu znaků se můžou lišit a můžou se lišit v závislosti na použitém formátu předpony názvu souboru a cesty. To je ještě složitější díky podpoře mechanismů zpětné kompatibility. Například starší MS-DOS systému souborů FAT podporuje maximálně 8 znaků pro název základního souboru a 3 znaky pro příponu, celkem 12 znaků včetně oddělovače tečky. To se běžně označuje jako název souboru 8.3 . Systémy souborů WINDOWS FAT a NTFS nejsou omezeny na názvy souborů 8.3, protože mají dlouhou podporu názvu souboru, ale stále podporují verzi 8.3 dlouhých názvů souborů.
Konvence pojmenování
Následující základní pravidla umožňují aplikacím vytvářet a zpracovávat platné názvy souborů a adresářů bez ohledu na systém souborů:
Pomocí tečky oddělte základní název souboru od přípony v názvu adresáře nebo souboru.
Pomocí zpětného lomítka (\) oddělte komponenty cesty . Zpětné lomítko rozdělí název souboru z cesty k němu a jeden název adresáře z jiného názvu adresáře v cestě. Zpětné lomítko v názvu skutečného souboru nebo adresáře nelze použít, protože se jedná o vyhrazený znak, který odděluje názvy do součástí.
Zpětné lomítko použijte podle požadavků jako součást názvů svazků , například "C:\" v "C:\path\file" nebo "\\server\share" v "\\server\share\path\file" pro názvy podle UNC (Universal Naming Convention). Další informace o názvech UNC najdete v části Omezení maximální délky cesty.
Nepředpokládej citlivost na velká a malá písmena. Představte si například názvy OSCAR, Oscar a Oscar, aby byly stejné, i když některé systémy souborů (například systém souborů kompatibilní se standardem POSIX) je mohou považovat za odlišné. Všimněte si, že NTFS podporuje sémantiku POSIX pro citlivost písmen, ale toto není výchozí chování. Další informace naleznete v tématu CreateFile.
Označení svazku (písmena jednotky) nejsou citlivé na velká a malá písmena. Například "D:\" a "d:\" odkazují na stejný svazek.
Pro název použijte libovolný znak, včetně znaků Unicode a znaků v rozšířené znakové sadě (128–255), s výjimkou následujících:
Následující rezervované znaky:
- < (menší než)
- > (větší než)
- : (dvojtečka)
- " (dvojitá uvozovka)
- / (dopředné lomítko)
- \ (zpětné lomítko)
- | (svislý pruh nebo potrubí)
- ? (otazník)
- * (hvězdička)
Celočíselná hodnota nula, někdy označovaná jako znak NUL ASCII.
Znaky, jejichž celočíselné reprezentace jsou v rozsahu od 1 do 31, s výjimkou alternativních datových proudů, kde jsou tyto znaky povoleny. Další informace o datových proudech souborů naleznete v tématu File Streams.
Jakýkoli jiný znak, který cílový systém souborů nepovoluje.
Jako součást adresáře použijte tečku v cestě k reprezentaci aktuálního adresáře, například ".\temp.txt". Další informace naleznete v tématu Cesty.
Jako součást adresáře použijte dvě po sobě jdoucí tečky (..) v cestě k reprezentaci nadřazeného objektu aktuálního adresáře, například ..\temp.txt". Další informace naleznete v tématu Cesty.
Nepoužívejte pro název souboru následující rezervované názvy:
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM¹, COM², COM³, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT¹, LPT² a LPT³. Vyhněte se také těmto názvům, za kterými následuje bezprostředně rozšíření; Například NUL.txt i NUL.tar.gz jsou ekvivalentní NUL. Další informace naleznete v Oborech názvů.
Poznámka
Systém Windows rozpozná 8bitovou ISO/IEC 8859-1 číslice horního indexu ¹, ² a ³ jako číslice a považuje je za platné části názvů zařízení COM# a LPT#, takže jsou rezervované v každém adresáři. Například
echo test > COM¹
se nepodaří vytvořit soubor.Neukončujte název souboru nebo adresáře mezerou nebo tečkou. I když základní systém souborů může podporovat takové názvy, prostředí Windows a uživatelské rozhraní ne. Je však přijatelné zadat tečku jako první znak názvu. Například ".temp".
Krátké a dlouhé názvy
Dlouhý název souboru je považován za jakýkoli název souboru, který překračuje krátký styl pojmenování MS-DOS (také označovaný jako 8.3 ) zásady vytváření názvů. Při vytváření dlouhého názvu souboru může systém Windows také vytvořit krátký název 8.3, který se nazývá alias 8.3 nebo krátký název a uložit ho na disk. Tento alias 8.3 je možné zakázat z důvodů výkonu v celém systému nebo pro zadaný svazek v závislosti na konkrétním systému souborů.
Windows Server 2008, Windows Vista, Windows Server 2003 a Windows XP: 8.3 aliasing nelze pro zadané svazky zakázat, dokud nepoužijete Windows 7 a Windows Server 2008 R2.
V mnoha systémech souborů bude název souboru obsahovat vlnovku (~) v každé komponentě názvu, která je příliš dlouhá, aby vyhovovala pravidlům pojmenování 8.3.
Poznámka
Ne všechny souborové systémy se řídí konvencí nahrazení vlnovky a systémy je možné nakonfigurovat tak, aby zakázaly generování aliasů 8.3, i když ho obvykle podporují. Proto nepředkládáme, že alias 8.3 již existuje na disku.
Pokud chcete požádat o názvy souborů 8.3, dlouhé názvy souborů nebo úplnou cestu k souboru ze systému, zvažte následující možnosti:
- Chcete-li získat formát 8.3 dlouhého názvu souboru, použijte funkci GetShortPathName.
- Pokud chcete získat dlouhou verzi názvu souboru krátkého názvu, použijte funkci GetLongPathName.
- Úplnou cestu k souboru získáte pomocí funkce GetFullPathName.
V novějších systémech souborů, jako je NTFS, exFAT, UDFS a FAT32, systém Windows ukládá dlouhé názvy souborů na disk v kódování Unicode, což znamená, že původní dlouhý název souboru je vždy zachován. To platí i v případě, že dlouhý název souboru obsahuje rozšířené znaky bez ohledu na znakovou stránku, která je aktivní během operace čtení nebo zápisu na disku.
Soubory používající dlouhé názvy souborů lze kopírovat mezi oddíly systému souborů NTFS a oddíly systému souborů Windows FAT bez ztráty informací o názvu souboru. To nemusí být pravdivé pro starší MS-DOS FAT a některé typy souborů CDFS (CD-ROM) v závislosti na skutečném názvu souboru. V tomto případě se krátký název souboru nahradí, pokud je to možné.
Stezky
Cesta k zadanému souboru se skládá z jedné nebo více komponent oddělené speciálním znakem (zpětné lomítko), přičemž každá komponenta obvykle představuje název adresáře nebo název souboru, ale s některými zvlášť výjimkou, které jsou popsány níže. Pro interpretaci cesty systémem je často klíčové, jak vypadá začátek cesty nebo její předpona. Tato předpona určuje oboru názvů cestu používá a navíc, jaké speciální znaky se používají v jakém umístění v cestě, včetně posledního znaku.
Pokud je součástí cesty název souboru, musí to být poslední komponenta.
Každá komponenta cesty bude také omezena maximální délkou určenou pro konkrétní systém souborů. Obecně platí, že tato pravidla jsou rozdělena do dvou kategorií: krátké a dlouhé. Všimněte si, že názvy adresářů jsou uloženy systémem souborů jako speciální typ souboru, ale pravidla pojmenování souborů platí také pro názvy adresářů. Abychom to shrnuli, cesta je jednoduše řetězcová reprezentace hierarchie mezi všemi adresáři, které existují pro konkrétní soubor nebo název adresáře.
Plně kvalifikované cesty vs. relativní cesty
U funkcí rozhraní API systému Windows, které manipulují se soubory, můžou být názvy souborů často relativní vzhledem k aktuálnímu adresáři, zatímco některá rozhraní API vyžadují plně kvalifikovanou cestu. Název souboru je relativní vzhledem k aktuálnímu adresáři, pokud nezačíná jedním z následujících kroků:
- Název UNC libovolného formátu, který vždy začíná dvěma znaky zpětného lomítka (\\). Další informace najdete v další části.
- Označení disku se zpětným lomítkem, například "C:\" nebo "d:\".
- Jedno zpětné lomítko, například „\directory“ nebo „\file.txt“. Označuje se také jako absolutní cesta .
Pokud název souboru začíná pouze designátorem disku, ale nikoli zpětným lomítkem za dvojtečku, interpretuje se jako relativní cesta k aktuálnímu adresáři na jednotce se zadaným písmenem. Mějte na paměti, že aktuální adresář může nebo nemusí být kořenovým adresářem v závislosti na tom, na co byla nastavena během poslední operace změny adresáře na daném disku. Příklady tohoto formátu jsou následující:
- "C:tmp.txt" odkazuje na soubor s názvem "tmp.txt" v aktuálním adresáři na jednotce C.
- "C:tempdir\tmp.txt" odkazuje na soubor v podadresáři na aktuální adresář na jednotce C.
Relativní cesta je také tehdy, pokud obsahuje "dvojtečky", to znamená dvě tečky obsažené společně v jedné komponentě cesty. Tento speciální specifikátor slouží k označení adresáře nad aktuálním adresářem, jinak se označuje jako "nadřazený adresář". Příklady tohoto formátu jsou následující:
- "..\tmp.txt" určuje soubor s názvem tmp.txt umístěný v nadřazeném adresáři.
- "..\..\tmp.txt" určuje soubor, který je dva adresáře nad aktuálním adresářem.
- "..\tempdir\tmp.txt" určuje soubor s názvem tmp.txt umístěný v adresáři s názvem tempdir, který je partnerským adresářem s aktuálním adresářem.
Relativní cesty můžou kombinovat oba typy příkladů, například C:..\tmp.txt". To je užitečné, protože i když systém sleduje aktuální jednotku a její adresář, sleduje také aktuální adresáře na každém z různých písmen jednotek (pokud má váš systém více než jednu jednotku), bez ohledu na to, které označení jednotky je nastaveno jako aktuální jednotka.
Omezení maximální délky cesty
V edicích Windows před Windows 10 verze 1607 je maximální délka cesty MAX_PATH, která je definována jako 260 znaků. V novějších verzích Windows se k odebrání limitu vyžaduje změna klíče registru nebo použití nástroje Zásady skupiny. Úplné podrobnosti najdete v tématu Omezení maximální délky cesty.
Jmenné prostory
V rozhraních API systému Windows se používají dvě hlavní kategorie konvencí oboru názvů, které se běžně označují jako obory názvů NT a obory názvů Win32. Obor názvů NT byl navržen tak, aby sloužil jako nejnižší úroveň, na níž mohou existovat další subsystémy a obory názvů, včetně subsystému Win32 a s ním souvisejících oborů názvů Win32. POSIX je dalším příkladem subsystému ve Windows, který je postaven na oboru názvů NT. Dřívější verze Windows také definovaly několik předdefinovaných nebo vyhrazených názvů pro určitá speciální zařízení, jako jsou komunikační porty (sériové a paralelní) porty a výchozí konzola pro zobrazení v rámci toho, co se teď nazývá obor názvů zařízení NT, a jsou stále podporovány v aktuálních verzích Windows kvůli zpětné kompatibilitě.
Obory názvů souborů Win32
Předpony a konvence oboru názvů Win32 jsou shrnuty v této části a v následující části s popisy jejich použití. Všimněte si, že tyto příklady jsou určeny pro použití s funkcemi rozhraní API systému Windows a nemusí všechny nutně fungovat s aplikacemi prostředí systému Windows, jako je Průzkumník Windows. Z tohoto důvodu existuje širší rozsah možných cest, než je obvykle k dispozici v aplikacích prostředí systému Windows, a aplikace systému Windows, které tuto výhodu využívají, je možné vyvinout pomocí těchto konvencí oboru názvů.
Při operacích vstupu/výstupu souborů předpona \\?\ v řetězci cesty informuje rozhraní API systému Windows, aby zakázala veškerou analýzu řetězců a aby se řetězec, který následuje za ní, přímo poslal do systému souborů. Pokud například systém souborů podporuje velké cesty a názvy souborů, můžete překročit MAX_PATH omezení, která jsou jinak vynucena rozhraními API systému Windows.
Protože se vypne automatické rozšíření řetězce cesty, předpona "\\?\" také umožňuje použití ".." a "." v názvech cest, což může být užitečné, pokud se pokoušíte provádět operace se souborem, který má tyto, jinak vyhrazené, specifikátory relativní cesty jako součást plně kvalifikované cesty.
Mnoho, ale ne všechny vstupně-výstupní rozhraní API souborů podporují \\?\; Měli byste se podívat na referenční téma pro každé rozhraní API, abyste měli jistotu.
Všimněte si, že rozhraní API Unicode by se měla použít k zajištění toho, aby předpona \\?\ umožnila překročit MAX_PATH.
Prostory jmen zařízení Win32
Předpona \\.\bude mít přístup k oboru názvů zařízení Win32 místo oboru názvů souboru Win32. Tímto způsobem se dosahuje přístupu k fyzickým diskům a svazkům přímo bez použití systému souborů, pokud rozhraní API podporuje tento typ přístupu. Tímto způsobem můžete přistupovat k mnoha jiným zařízením než diskům (například pomocí CreateFile a DefineDosDevice funkcí).
Například pokud chcete otevřít sériový komunikační port 1 systému, můžete použít "COM1" ve volání funkce CreateFile. To funguje, protože com1–COM9 jsou součástí vyhrazených názvů v oboru názvů NT, i když použití předpony "\\.\" bude také fungovat s těmito názvy zařízení. Pokud máte nainstalovanou sériovou rozšiřovací desku se 100 porty a chcete otevřít COM56, nemůžete jej otevřít použitím "COM56", protože neexistuje žádný předdefinovaný jmenný prostor NT pro COM56. Budete ho muset otevřít pomocí \\.\COM56, protože "\\.\" přejde přímo do oboru názvů zařízení, aniž byste se pokusili najít předdefinovaný alias.
Dalším příkladem použití oboru názvů zařízení Win32 je použití funkce CreateFile s "\.\.\PhysicalDriveX" (kde X je platná celočíselná hodnota) nebo "\\.\CdRomX". To vám umožní přistupovat k těmto zařízením přímo a obejít systém souborů. To funguje, protože systém vytváří tyto názvy zařízení, když jsou tato zařízení přiřazena, a některé ovladače také vytvoří v systému další aliasy. Například ovladač zařízení, který implementuje název "C:\", má vlastní obor názvů, který se také stane systémem souborů.
Rozhraní API, která procházejí funkcí CreateFile obecně pracují s předponou \\.\, protože CreateFile je funkce použitá k otevření souborů i zařízení v závislosti na používaných parametrech.
Pokud pracujete s funkcemi rozhraní API systému Windows, měli byste použít předponu \\.\ pro přístup k zařízením pouze a ne k souborům.
Většina rozhraní API nepodporuje \\.\. Rozpoznají se pouze ty, které jsou navrženy tak, aby fungovaly s názvoslovím zařízení. Vždy zkontrolujte referenční téma pro každé rozhraní API, abyste měli jistotu.
NT Namespaces
K dispozici jsou také rozhraní API, která umožňují použití konvence oboru názvů NT, ale Správce objektů systému Windows to ve většině případů nepotřebuje. Pro ilustraci je užitečné procházet obory názvů Windows v prohlížeči systémových objektů pomocí nástroje Windows Sysinternals WinObj. Když spustíte tento nástroj, uvidíte, že obor názvů NT začíná v kořenovém adresáři, nebo znakem "\". Podsložka s názvem "Global??" je místo, kde se nachází obor názvů Win32. Pojmenované objekty zařízení se nacházejí v oboru názvů NT v podadresáři Zařízení. Zde můžete také najít Serial0 a Serial1, objekty zařízení představující první dva porty COM, pokud jsou přítomné ve vašem systému. Objekt zařízení představující svazek by byl něco jako "HarddiskVolume1", i když se číselná přípona může lišit. Název "DR0" v podadresáři "Harddisk0" je příkladem objektu zařízení představujícího disk atd.
Aby tyto objekty zařízení byly přístupné aplikacemi pro Windows, ovladače zařízení vytvoří symbolický odkaz (symlink) v oboru názvů Win32 "Global??", na příslušné objekty zařízení. Například com0 a COM1 v podadresáři "Global??" jsou jednoduše symlinky na Serial0 a Serial1, "C:" je symlink na HarddiskVolume1, "Physicaldrive0" je symlink na DR0 atd. Bez symlinku nebude zadané zařízení Xxx k dispozici žádné aplikaci pro Windows používající konvence oboru názvů Win32, jak je popsáno výše. Pro toto zařízení však lze otevřít popisovač pomocí jakéhokoliv API, které podporuje absolutní cestu v rámci oboru názvů NT ve formátu "\Device\Xxx."
S přidáním podpory více uživatelů prostřednictvím Terminálových služeb a virtuálních počítačů se dále stalo nezbytným virtualizovat zařízení kořenového adresáře pro celý systém v rámci oboru názvů Win32. Toho bylo dosaženo přidáním symlink s názvem "GLOBALROOT" do oboru názvů Win32, který můžete vidět v podadresáři "Global??" nástroje prohlížeče WinObj, který byl dříve popsán a ke kterému můžete přistupovat prostřednictvím cesty "\\?\GLOBALROOT". Tato předpona zajišťuje, aby cesta, která následuje za ní, směřovala do skutečné kořenové cesty správce systémových objektů, a ne do cesty závislé na sezení.