Unde sunt utilizate variabilele de mediu Windows? Activați vizibilitatea folderelor ascunse

Mulți utilizatori de PC-uri Windows, ca să nu mai vorbim de dezvoltatori, sunt familiarizați cu problemele atunci când lucrează cu căi lungi (mai mult de 260 de caractere, MAX_PATH) pentru fișiere sau directoare.

Acest articol discută modalități de a scăpa de această relicvă atunci când se dezvoltă aplicații pe diverse platforme (WinApi, .Net Framework, .Net Core) și se activează suportul nativ pentru căi lungi în Windows 10 (Actualizare aniversară).

Win API Applications

În aplicațiile care utilizează API-ul Win pentru a lucra cu fișiere, rețeta pentru a scăpa de limitarea MAX_PATH este cunoscută din timpuri imemoriale - a fost necesar să se folosească versiunea Unicode a funcției cu sfârșitul „W” pentru a lucra cu un director sau fișier și începeți calea cu prefixul \\?\. Acest lucru a făcut posibilă utilizarea căilor de până la 32767 de caractere.

În Windows 10 (1607), comportamentul funcțiilor pentru lucrul cu fișierele s-a schimbat: acum este posibil să dezactivați verificarea restricțiilor MAX_PATH la nivel de sistem.

Acest lucru a afectat următoarele funcții:

Pentru a lucra cu directoare: CreateDirectoryW, CreateDirectoryExW, GetCurrentDirectoryW, RemoveDirectoryW, SetCurrentDirectoryW. Și pentru lucrul cu fișiere: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFileAttributesFlexW, GetFirstFileW, GetFirstFileW, GetFirstFileW veFileW, Mo veFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, FindNextStreamW , GetCompressedFileSizeW, GetFinalPathNameByHandleW.


Acest lucru elimină necesitatea prefixului \\?\ și poate oferi aplicațiilor care rulează direct sau indirect prin API-ul Win șansa de a obține suport pentru căi lungi fără a fi nevoie să le reconstruiască. Cum să activați această funcție este descris la sfârșitul articolului.

.Cadru net

Deși .Net Framework folosește API-ul Win pentru a lucra cu fișiere, modificarea anterioară nu ar fi adus rezultate, deoarece Codul BCL are încorporate verificări preliminare pentru permisiunea lungimii numelor de director și fișiere și nici măcar nu a ajuns la punctul de a apela funcțiile Win API, aruncând o excepție cunoscută. Datorită numeroaselor solicitări din partea comunității (mai mult de 4500 pe UserVoice), în versiunea 4.6.2, verificările privind restricțiile privind lungimea căii au fost eliminate din codul BCL, lăsând acest lucru în sarcina sistemelor de operare și de fișiere!

Iată ce oferă:

  • Folosind prefixul „\\?\” putem lucra cu căi lungi ca în API-ul Win, Directory.CreateDirectory("\\\\?\\" + long_dir_name);
  • Dacă activați suportul nativ pentru nume lungi de fișiere în Windows 10 (1607), nici măcar nu trebuie să utilizați un prefix!
Cum se pornește:
  • Utilizați .Net Framework 4.6.2 ca țintă atunci când construiți aplicația.
  • Utilizați un fișier de configurare, de exemplu, dacă aplicația a fost deja construită sub .Net 4.0:

.Net Core

Aici, sprijinul pentru căi lungi a fost anunțat încă din noiembrie 2015. Se pare că natura Open Source a proiectului și lipsa unei necesități stricte de a asigura compatibilitatea cu versiunea anterioară au avut un impact.

Cum se pornește:
Totul funcționează din cutie. Spre deosebire de implementarea în .Net Framework, nu este nevoie să adăugați prefixul „\\?\” - acesta este adăugat automat dacă este necesar.

Aici puteți vedea un exemplu.

Cum să activați suportul pentru căi lungi în Windows 10 (1607)

Această caracteristică este dezactivată în mod implicit. Acest lucru se datorează faptului că această caracteristică este experimentală și diferite subsisteme și aplicații trebuie dezvoltate pentru suport complet.

Puteți activa suportul încorporat pentru căi lungi prin crearea sau modificarea următorului parametru de registry de sistem: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled parametru (Tip: REG_DWORD) 1 – corespunde valorii activate.

Sau prin politicile de grup (Win+R\gpedit.msc) Configurare computer > Șabloane administrative > Sistem > Sistem de fișiere > Activați căi lungi NTFS. Este același lucru într-o versiune localizată: Configurare computer > Șabloane administrative > Sistem > Sistem de fișiere > Activați căi lungi Win32.

În plus, sursele nu sunt de acord în privința manifestului (sau am înțeles greșit, dar momentan nu am cum să verific). De exemplu, documentația MSDN afirmă că un manifest poate fi utilizat ca o modalitate alternativă de a activa suportul pentru căi lungi în aplicațiile individuale, iar blogul MSDN afirmă că acesta este al doilea pas necesar după activarea acestuia în politici.
Dar sunt de acord în formatul pentru specificarea acestei opțiuni:

Adevărat
Din păcate, acest lucru nu va funcționa cu CMD în acest moment, din cauza particularităților de lucru cu căi, dar în PowerShell totul ar trebui să funcționeze.

P.S.

Aceasta se încheie micul meu post de vineri, lăsând deoparte întrebările privind caracterul complet al implementării suportului pentru căi lungi în Windows 10 (1607) sau performanța atunci când se utilizează diferite combinații de ediții Windows, sisteme de fișiere și API-uri. Postarea va fi actualizată pe măsură ce devin disponibile noi fapte și rezultate experimentale.

Vă mulțumim pentru atenție!

Pliant "Datele aplicatiei" conține informații despre utilizator ale diverselor aplicații (istoric, setări, sesiuni, marcaje, fișiere temporare etc.). De-a lungul timpului, se înfundă cu diverse date care pot să nu mai fie necesare, ci doar ocupă spațiu pe disc. În acest caz, este logic să curățați acest director. În plus, dacă, la reinstalarea sistemului de operare, utilizatorul dorește să salveze setările și datele pe care le-a folosit în diferite programe mai devreme, atunci trebuie să transfere conținutul acestui director din sistemul vechi în cel nou prin copierea acestuia. Dar mai întâi trebuie să găsiți unde se află. Să aflăm cum să facem acest lucru pe computere care rulează sistemul de operare Windows 7.

Nume "Datele aplicatiei"înseamnă „date aplicației”, adică tradus în rusă înseamnă „date aplicației”. De fapt, în Windows XP acest director avea numele complet, care în versiunile ulterioare a fost scurtat la numele său actual. După cum am menționat mai sus, acest folder conține date care se acumulează în timpul funcționării programelor de aplicație, a jocurilor și a altor aplicații. Este posibil să existe mai multe directoare cu acest nume pe computer, dar mai multe. Fiecare dintre ele corespunde unui cont de utilizator separat creat. În catalog "Datele aplicatiei" Există trei subdirectoare:

  • "Local";
  • „LocalLow”;
  • "Roaming".

Fiecare dintre aceste subdirectoare conține foldere ale căror nume sunt identice cu numele aplicațiilor corespunzătoare. Aceste directoare trebuie curățate pentru a elibera spațiu pe disc.

Activați vizibilitatea folderelor ascunse

Ar trebui să știți că directorul "Datele aplicatiei» ascuns implicit. Acest lucru se face pentru a preveni utilizatorii neexperimentați să ștergă din greșeală datele importante conținute în acesta sau în întregime. Dar pentru a găsi acest folder, trebuie să activăm vizibilitatea folderelor ascunse. Înainte de a trece la metodele de detectare "Datele aplicatiei", hai să aflăm cum să facem asta. Există mai multe opțiuni pentru a activa vizibilitatea folderelor și fișierelor ascunse. Acei utilizatori care doresc să se familiarizeze cu ele o pot face folosind un articol separat de pe site-ul nostru. Aici vom lua în considerare o singură opțiune.


Afișarea dosarelor ascunse va fi activată.

Metoda 1: Căutați în câmpul de programe și fișiere

Acum haideți să trecem direct la modurile în care vă puteți muta în directorul dorit sau găsiți unde se află. Dacă trebuie să mergi la "Datele aplicatiei" utilizator curent, atunci acest lucru se poate face folosind câmpul „Găsiți programe și fișiere”, care se află în meniu "Start".


Direct la catalog "Datele aplicatiei" poți ajunge acolo direct introducând o expresie în câmp „Găsiți programe și fișiere”.


Metoda 2: Rulați instrumentul

Un algoritm foarte similar pentru deschiderea unui director "Datele aplicatiei" se poate face folosind instrumentul de sistem "Alerga". Această metodă, ca și cea anterioară, este potrivită pentru deschiderea unui folder pentru contul sub care lucrează în prezent utilizatorul.


În mod similar cu metoda anterioară, puteți ajunge imediat la dosar "Datele aplicatiei".


Metoda 3: Treceți prin Explorer

Cum să aflați adresa și să intrați în dosar "Datele aplicatiei", destinat contului în care lucrează în prezent utilizatorul, ne-am dat seama. Dar ce se întâmplă dacă trebuie să deschideți un director "Datele aplicatiei" pentru alt profil? Pentru a face acest lucru, trebuie să faceți tranziția direct "Conductor" sau introduceți adresa exactă a locației, dacă o cunoașteți deja, în bara de adrese "Conductor". Problema este că pentru fiecare utilizator individual, în funcție de setările sistemului, locația Windows și numele conturilor, această cale va fi diferită. Dar modelul general al căii către directorul în care se află folderul dorit va arăta astfel:

(unitate_sistem):\Utilizatori\(nume_utilizator)


Există mai multe opțiuni pentru a intra în dosar "Datele aplicatiei"și aflați locația sa în Windows 7. Acest lucru se poate face ca metodă de tranziție directă folosind "Conductor", și prin introducerea expresiilor de comandă în câmpurile unor instrumente de sistem. Este important de știut că pot exista mai multe foldere cu un nume similar, în conformitate cu numele conturilor care sunt create în sistem. Prin urmare, trebuie să înțelegeți imediat în ce director doriți să mergeți.


Calea către un fișier specificat constă din una sau mai multe componente separate printr-un caracter special (backslash), fiecare componentă fiind de obicei un nume de director sau un nume de fișier, dar cu unele excepții notabile descrise mai jos. Acest lucru este adesea esențial pentru interpretarea unui sistem de căi: cum arată începutul sau prefixul unei căi. Acest prefix specifică spațiul de nume pe care îl folosește calea și, în plus, ce caractere speciale sunt folosite în ce poziție în cale, inclusiv ultimul caracter.

Dacă componenta cale este un nume de fișier, aceasta trebuie să fie ultima componentă.

Fiecare componentă a căii va fi limitată de lungimea maximă specificată pentru sistemul de fișiere specific. În general, aceste reguli se împart în două categorii: scurte și lungi. Rețineți că numele de directoare sunt stocate în sistemul de fișiere ca un tip de fișier special, dar convențiile de denumire pentru fișiere se aplică și numelor de directoare. Deci o cale este pur și simplu o reprezentare în șir a ierarhiei dintre toate directoarele care există pentru un anumit fișier sau nume de director.

Căi complete și relative

Pentru funcțiile API Windows care manipulează fișiere, numele fișierelor pot fi adesea relativ la directorul curent, în timp ce unele API-uri necesită calea completă. Numele fișierului se referă la directorul curent, cu excepția cazului în care începe cu următoarele:

  • Un nume UNC de orice format care începe întotdeauna cu două caractere backslash ("\\").
  • Un indicator de unitate urmat de o bară oblică inversă, cum ar fi „C:\” sau „d:\”.
  • O singură bară oblică inversă, cum ar fi „director\” sau „\file.txt” Aceasta se mai numește și cale absolută.
Dacă un nume de fișier începe doar cu un indicator de unitate, dar nu cu o bară oblică inversă după două puncte, este interpretat ca o cale relativă către directorul curent de pe litera de unitate specificată. Rețineți că directorul curent poate fi sau nu directorul rădăcină, în funcție de ceea ce a fost setat în timpul ultimei operațiuni de „schimbare director” de pe acea unitate. Exemple de acest format arată astfel:
  • „C:tmp.txt” se referă la un fișier numit „tmp.txt” în directorul curent de pe unitatea C.
  • „C:tempdir\tmp.txt” se referă la un fișier dintr-un subdirector al directorului curent de pe unitatea C.
O cale este de asemenea considerată relativă dacă conține „două puncte”; adică două perioade împreună într-o componentă de cale. Acest calificator special este folosit pentru a desemna directorul de deasupra directorului curent, altfel cunoscut sub numele de „directorul părinte”. Exemple de acest format arată astfel:
  • „..\tmp.txt” indică un fișier numit tmp.txt, care se află în directorul părinte al directorului curent.
  • „..\..\tmp.txt” indică un fișier care se află la două directoare deasupra directorului curent.
  • „..\tempdir\tmp.txt” specifică un fișier numit tmp.txt care se află într-un director numit tempdir în același director al directorului curent.
Căile relative pot combina ambele tipuri de exemple, de exemplu „C:..\tmp.txt”. Acest lucru este util deoarece, în timp ce sistemul ține evidența unității curente împreună cu directorul curent al acelei unități, ține, de asemenea, evidența directoarelor curente din fiecare dintre diferitele litere de unitate (dacă sistemul dvs. are mai multe), indiferent de ce unitate este desemnat ca unitate curentă.

Limită maximă de lungime a căii

În API-ul Windows (cu unele excepții care vor fi discutate în paragrafele următoare), există o lungime maximă a căii în max_path care este definită ca 260 de caractere. Calea locală este structurată în următoarea ordine: literă de unitate, două puncte, bară oblică inversă, componente de nume separate prin bare oblice inverse și un caracter nul final. De exemplu, calea maximă către unitatea D este „D:\un șir de cale de 256 de caractere”, unde „ ” reprezintă un caracter NULL invizibil pentru pagina de cod de sistem curentă. (Caracterele sunt folosite aici pentru claritate și nu pot face parte dintr-un șir de cale validă.)

Fișierul I/O funcționează în API-ul Windows convertește „/” în „\” ca parte a conversiei numelui într-un nume de tip NT, cu excepția cazului în care se folosește prefixul „\\?\”.

Există multe funcții în API-ul Windows care au și versiuni Unicode pentru a permite lungimi extinse ale căilor pentru o lungime totală maximă a căii de 32.767 de caractere. Acest tip de cale constă din componente separate prin bare oblice inverse, fiecare până la valoarea returnată în parametrul Lpmaximumcomponentlength al funcției GetVolumeInformation (această valoare este de obicei de 255 de caractere). Pentru a specifica o cale de lungime extinsă, utilizați prefixul „\\?\”. De exemplu?\\" ?\D:\very_long_path".

Rețineți că calea maximă de 32.767 de caractere este aproximativă, deoarece prefixul „\\?\” poate fi extins la un șir mai lung de către sistem în timpul execuției, iar această extindere este aplicată la lungimea totală.

Același prefix poate fi folosit și cu căile construite conform Convenției Universale de Denumire (UNC). Pentru a specifica o astfel de cale folosind UNC, utilizați „\\?\UNC\”. De exemplu?\\",\UNC path\\server\share", unde "server" este numele computerului și "share" este numele folderului partajat. Aceste prefixe nu sunt folosite ca parte a căii în sine. Ele indică faptul că calea trebuie transmisă sistemului cu modificări minime, ceea ce înseamnă că nu puteți utiliza bare oblice pentru a reprezenta separatorii de căi sau un punct pentru a reprezenta directorul curent sau puncte duble pentru a reprezenta directorul părinte. Deoarece nu puteți utiliza prefixul „\\?\” cu o cale relativă, căile relative sunt întotdeauna limitate la un total de MAX_PATH caractere.

Nu este nevoie să faceți nimic pentru a normaliza Unicode în șirurile de cale și nume de fișier pentru funcțiile API de I/O fișier Windows, deoarece sistemul de fișiere tratează calea și numele fișierelor ca o secvență de valori wchar. Orice normalizare necesară pentru aplicația dvs. trebuie făcută ținând cont de acest lucru, extern oricăror apeluri efectuate către fișierul funcției Windows I/O API.

Când utilizați API-ul pentru a crea un director, calea specificată nu poate fi atât de lungă încât numele fișierului 8.3 să nu poată fi adăugat (adică numele directorului nu poate depăși MAX_PATH minus 12).

Shell și sistemul de fișiere au cerințe diferite. Este posibil să creați o cale cu API-ul Windows pe care interfața de utilizare shell nu o poate interpreta corect.

Începând cu Windows 10 versiunea 1607, restricțiile MAX_PATH au fost eliminate din directoarele de fișiere și caracteristici Win32 partajate. Cu toate acestea, este necesar să alegeți un nou comportament. Registrul vă permite să activați sau să dezactivați noul comportament de cale lungă. Pentru a activa căi lungi, setați cheia de registry la

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Tip: reg_dword). Valoarea cheii va fi memorată în cache de sistem (per proces) după primul apel la un fișier Win32 sau o funcție de director. Cheia de registry nu va fi reîncărcată pe toată durata procesului. Poate fi necesară o repornire pentru toate aplicațiile din sistem pentru a recunoaște valoarea cheii, deoarece unele procese pot fi început înainte ca cheia să fie instalată.

De asemenea, puteți activa noul comportament de cale lungă pe bază de aplicație prin intermediul manifestului:

Adevărat Acestea sunt funcțiile de gestionare a directoarelor care nu vor avea o limită max_path dacă activați căi lungi: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.

Această secțiune se referă la:
  • Platforme: Solaris SPARC, Red Hat Linux, SUSE Linux, Oracle Linux, Windows 10, Windows 8, Windows 7, Vista, Windows XP, Mac OS X

Instrucțiunile de pe această pagină sunt destinate numai utilizatori experimentați și administratori de sistem.


Informații generale

  • Variabil CALE este o variabilă de sistem pe care sistemul de operare o folosește pentru a găsi obiectele executabile dorite pe linia de comandă sau fereastra terminalului.
  • Variabila de sistem CALE poate fi setat folosind utilitar de sistemîn Panoul de control Windows sau folosind fișierul de pornire Linux și Solaris.
  • Pe computere care rulează Windows sau Mac OS X efectuarea de modificări variabilei de sistem PATH de obicei nu este necesar.

Windows

Windows 10 și Windows 8
  1. În linia „Căutare”, căutați: Sistem (Panou de control)
  2. Apasa pe link .
  3. Clic variabile de mediu. În capitolul variabile de mediu Schimbare
  4. În fereastră (sau Variabilă nouă de sistem Bine Bine.
Windows 7
  1. Pe desktop, faceți clic dreapta pe pictogramă Calculator.
  2. Din meniul contextual, selectați Proprietăți.
  3. Apasa pe link Setari de sistem avansate.
  4. Clic variabile de mediu. În capitolul variabile de mediu selectați variabila de mediu PATH. Clic Schimbare. Dacă variabila PATH nu există, faceți clic pe Creare.
  5. La fereastră Modificarea unei variabile de sistem(sau Variabilă nouă de sistem) specifică valoarea variabilei de mediu PATH. Clic Bine. Închideți alte ferestre deschise făcând clic Bine.
  6. Redeschideți fereastra promptului de comandă și rulați codul java.
Windows XP
  1. Clic start, Selectați Panou de control, faceți dublu clic pe Sistemși selectați o filă În plus.
  2. Clic variabile de mediu. În capitolul variabile de mediu selectați variabila de mediu PATH. Clic Schimbare. Dacă variabila PATH nu există, faceți clic pe Creare.
  3. La fereastră Modificarea unei variabile de sistem(sau Variabilă nouă de sistem) specifică valoarea variabilei de mediu PATH. Clic Bine. Închideți alte ferestre deschise făcând clic Bine.
  4. Redeschideți fereastra promptului de comandă și rulați codul java.

Mac OS X

Pentru a rula o altă versiune de Java, furnizați calea completă sau utilizați instrumentul java_home:

% /usr/libexec/java_home -v 1.8.0_73 --exec javac -version

Solaris și Linux

  1. Pentru a vedea dacă calea este configurată corect:
    În ferestrele terminalului, introduceți:
    % java -versiune
    Versiunea instrumentului java va fi afișată dacă nu poate fi găsită. Dacă versiunea este învechită sau apare o eroare java: comanda nu a fost găsită, atunci calea este setată incorect.
  2. Determinați care versiune executabilă de java este prima găsită într-o variabilă CALE
    Într-o fereastră de terminal, introduceți:
    % care java
Configurarea finală a căii

Pentru a seta calea permanent, configurați-o în fișierul de pornire.
Notă. Sunt furnizate instrucțiuni pentru cele mai populare două shell-uri pe Linux și Solaris. Dacă utilizați alte shell-uri, consultați tutorialul despre setarea variabilei PATH.

Bash shell

Editați fișierul de pornire (~/.bashrc)

  1. Schimbați o variabilă CALE variabil
    PATH=/usr/local/jdk1.8.0/bin:$PATH
    export PATH
  2. Descărcați fișierul de pornire
    %. /.profil

  3. % java -versiune
C shell (csh)

Editați fișierul de pornire (~/.cshrc)

  1. Stabiliți calea
    set calea=(/usr/local/jdk1.8.0/bin $cale)
  2. Salvați modificările și închideți fereastra
  3. Descărcați fișierul de pornire
    % sursă ~/.cshrc
  4. Asigurați-vă că calea este setată repetând comanda java
    % java -versiune