Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Zanimljivo
  • Uklanjanje dugih naziva datoteka. Odaberite dugu stazu (ili zbogom MAX_PATH)

Uklanjanje dugih naziva datoteka. Odaberite dugu stazu (ili zbogom MAX_PATH)

Mnogi korisnici Windows PC-a, a da ne spominjemo programere, upoznati su s problemima pri radu sa dugim (više od 260 znakova, MAX_PATH) putanjama datoteke ili direktorija.

Ovaj članak govori o načinima da se riješite ove relikvije prilikom razvoja aplikacija na razne platforme(WinApi, .Net Framework, .Net Core) i aktivacija izvorne podrške za duge staze u Windows 10 (Anniversary Update).

Win API aplikacije

U aplikacijama koje koriste Win API za rad s datotekama, recept za oslobađanje od ograničenja MAX_PATH poznat je od pamtivijeka - bilo je potrebno koristiti Unicode verziju funkcije sa završetkom "W" za rad s direktorijem ili datotekom i započeti stazu sa prefiks \\?\. Ovo je omogućilo korištenje putanja dužine do 32767 znakova.

U Windows 10 (1607) se promijenilo ponašanje funkcija za rad s datotekama: sada je moguće onemogućiti provjeru ograničenja MAX_PATH na nivou sistema.

To je uticalo na sljedeće funkcije:

Za rad sa imenicima: CreateDirectoryW, CreateDirectoryExW, GetCurrentDirectoryW, RemoveDirectoryW, SetCurrentDirectoryW. A za rad sa fajlovima: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFileAttributesExW, GetFileAttributesExW, GetFileAttributesExW, GetFileAttributesExW, GetFileAttributesExW, GetFileAttributesExW, GetNaFileW, GetNaFileW, GetFileAttributesExW, GetNaFirstFile veFileW, Mo veFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, FindNextStreamW , GetCompressedFileSizeW, GetFinalPathNameByHandleW.


Ovo eliminiše potrebu za prefiksom \\?\ i potencijalno daje aplikacijama koje se pokreću direktno ili indirektno preko Win API-ja priliku da dobiju podršku za duge staze bez potrebe za ponovnom izgradnjom. Kako aktivirati ovu funkciju opisano je na kraju članka.

.Net Framework

Iako .Net Framework koristi Win API za rad s datotekama - prethodna promjena ne bi donelo rezultate, jer ugrađen u BCL kod preliminarne provjere o prihvatljivosti dužine imena direktorija i datoteka, a nije čak ni došao do točke pozivanja Win API funkcija, izbacivanja poznatog izuzetka. Zbog brojnih zahtjeva zajednice (više od 4500 na UserVoiceu), u verziji 4.6.2, provjere ograničenja dužine putanje su uklonjene iz BCL koda, ostavljajući ovo na operativni sistem i sistem datoteka!

Evo šta daje:

  • Koristeći prefiks “\\?\” možemo raditi sa dugim stazama kao u Win API-ju, Directory.CreateDirectory("\\\\?\\" + long_dir_name);
  • Ako omogućite izvornu podršku za duga imena Windows fajlovi 10 (1607), ne morate čak ni koristiti prefiks!
Kako ga uključiti:
  • Koristite .Net Framework 4.6.2 kao cilj kada gradite aplikaciju.
  • Koristi konfiguracijski fajl, na primjer, ako je aplikacija već napravljena pod .Net 4.0:

.Net Core

Ovdje je podrška za duge staze najavljena još u novembru 2015. godine. Očigledno je uticala priroda projekta otvorenog koda i nedostatak stroge potrebe da se osigura kompatibilnost unatrag.

Kako ga uključiti:
Sve radi iz kutije. Za razliku od implementacije u .Net Frameworku, nema potrebe za dodavanjem prefiksa “\\?\” – dodaje se automatski ako je potrebno.

Ovdje možete vidjeti primjer.

Kako omogućiti podršku za duge staze u Windows 10 (1607)

Ova funkcija je podrazumevano onemogućena. To je zato što je ova funkcija eksperimentalna i za punu podršku treba razviti različite podsisteme i aplikacije.

Možete omogućiti ugrađenu podršku za duge staze kreiranjem ili promjenom sljedećeg parametra sistemskog registra: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled parametar (Tip: REG_DWORD) 1 – odgovara omogućenoj vrijednosti.

Ili putem grupnih pravila (Win+R\gpedit.msc) Konfiguracija računara > Administrativni predlošci > Sistem > Sistem datoteka > Omogući NTFS duge staze. Isto je i u lokaliziranoj verziji: Konfiguracija računara > Administrativni predlošci > Sistem > Sistem datoteka > Omogući Win32 duge staze.

Nadalje, izvori se ne slažu u vezi sa manifestom (ili sam pogrešno shvatio, ali trenutno nemam načina da provjerim). Na primjer, MSDN dokumentacija kaže da se manifest može koristiti kao alternativni način aktiviranje podrške za duge puteve pojedinačne aplikacije, a MSDN blog navodi da je ovo drugi potreban korak nakon aktivacije u politikama.
Ali oni se slažu u formatu za navođenje ove opcije:

istinito
Nažalost, ovo neće raditi sa CMD-om, ali ovog trenutka, zbog posebnosti rada sa putanjama, ali sve bi trebalo da radi u PowerShell-u.

P.S.

Tu se završava moj mali post u petak, izostavljajući pitanja kompletnosti implementacije podrške za duge staze u Windows 10 (1607), odnosno performansi pri korištenju razne kombinacije Windows izdanja, sistem datoteka i API-ji. Objava će se ažurirati kako budu dostupne nove činjenice i eksperimentalni rezultati.

Hvala vam na pažnji!

Naslov se pokazao dugim, ali ukazuje na suštinu problema koji će ovdje biti opisan. Nedavno sam se susreo sa ne baš dobrom situacijom. Dok sam sortirao hard disk i čistio ga od nepotrebnih stvari, otkrio sam da jedna od datoteka nije izbrisana, ali se pojavila sljedeća greška: „Sistem datoteka ne podržava takve duga imena izvorne datoteke. Pokušajte premjestiti datoteku u mapu s kraćom dužinom putanje ili navedite kraće ime datoteke i pokušajte ponovo."

Ne samo da nisam mogao obrisati datoteku, već nisam mogao ni promijeniti ime u kraće ime. Mnogima bi ovo izgledalo kao slijepa ulica, jer se ispostavilo da datoteka nije izbrisana.

Zapravo, problem se može riješiti vrlo jednostavno i brzo, a sada ću opisati dvije metode za njegovo rješavanje, a na vama je da odlučite koji ćete koristiti.

Šta učiniti ako je put do izvora predugačak, kako izbrisati takav fajl?

Ako imate datoteku koja nije izbrisana zbog dugog imena, postoji nekoliko opcija za rješavanje problema. Na primjer, datoteka je ugniježđena u nekoliko direktorija, recimo pet ili čak deset foldera koji imaju nazive od 10-20 znakova, onda to može biti razlog da se datoteka ne briše. Činjenica je da Windows ne podržava datoteke čija imena imaju više od 260 znakova. Ako je ovo ograničenje prekoračeno, pojavit će se greška koju sam pokazao iznad. Broj foldera s vlastitim imenima i samim imenom datoteke trebao bi ukupno biti manji od 260 znakova. Sistem takođe ima jednu osobinu - ako je ovo ograničenje prekoračeno, i dalje možemo preimenovati foldere. To znači da morate preimenovati sve fascikle u kratko ime, na primer, slovo ili broj.


Ovaj problem može nastati ne samo zato što ste dali tako dugo ime. Ovo mi se desilo kada sam odlučio da preuzmem fajlove sa sajta sa servera i uradim nešto. Pošto fajlovi više nisu bili potrebni, obrisao sam ceo direktorijum sa fajlovima sajta, ali kako se ispostavilo, on je sadržao fajl sa veoma dugim imenom, plus nazivi fascikli, i to mi nije omogućilo da izbrišem sve.

Metod dva pomoći će ako prvi nije uspio. Činjenica je da se ne mogu preimenovati svi folderi koji vode do datoteke sa dugim imenom i da će se pojaviti ista greška sistema datoteka. Tada možete kreirati virtuelni disk, koristeći bilo koju podmapu koja vodi do datoteke koja se ne može izbrisati. Sada ću vam pokazati kako se to radi.

Otvaranje komandna linija. Da biste to učinili, pritisnite kombinaciju Win+R i unesite naredbu cmd. Možete kliknuti desni klik miša na Start meni (ili kombinaciju tastera Win+X) i tamo izaberite komandnu liniju.

Sada pišete komandu koja će kreirati virtuelni disk za nas:

Morate odabrati slovo diska koje drugi ne zauzimaju. Sistemska particija Obično su označena slova C, a drugi dio je označen kao D ili E, a zatim odaberite bilo koji drugi.

Put do fascikle mora biti specificiran sa diska. Ako vam je ovo teško, otvorite fasciklu koja će delovati kao virtuelni disk i kopirajte putanju do nje u Exploreru na vrhu.

Moja komanda izgleda ovako:

Kada odemo na My Computer, trebali biste tamo vidjeti disk sa slovom koje smo mu dodijelili iz komandne linije. Tako će se put do datoteke smanjiti za skoro polovinu, što znači da ukupna dužina znakova može biti manja od 260 karaktera. Sada možete pokušati da se riješite neizbrisivog.


Da biste izbrisali virtuelni disk potrebno je da unesete naredbu:

substDiskLetter/d

Koristeći Total Commander

Na internetu sam otkrio metodu koja vam omogućava da izbrišete datoteke koje se ne mogu izbrisati pomoću . Naravno, ovdje je nedostatak što morate instalirati dodatni softver na računaru, a neće svi htjeti da to rade. U svakom slučaju, ostavit ću ovu metodu ovdje u slučaju da je neko želi koristiti.

Preuzmite i instalirajte program. Idemo na karticu "File" kliknite na odjeljak "Promijeni atribute". Pojavljuje se prozor u kojem uklanjamo kvačice sa svih atributa. Ako nema kvačice pored stavke na vrhu "Sadržaj direktorija procesa"- biraj. Sada iz istog programa pokušavamo izbrisati datoteku s dugim imenom.


Koristimo 7-Zip arhiver

Za ovaj zadatak trebat će nam 7-Zip arhiver. Kliknite desnim tasterom miša na početni direktorij i usmjerite miša na particiju "7-Zip" i odaberite stavku "Dodaj u arhivu".

Pojavljuje se prozor u kojem trebate označiti samo jedno polje. "Izbriši fajlove nakon kompresije". Zatim kliknite OK.

Arhiva svih ovih stvari se kreira na radnoj površini i folderi sa dugačak fajl jednostavno se brišu. Samu arhivu možete izbrisati bez problema.

Ovo su načini na koje smo pogledali da popravimo grešku da datoteka nije izbrisana. Možda imate druge opcije kako to učiniti?

Štetna operaciona sala Windows sistem Ne dozvoljava vam da izbrišete datoteku i viče da ima “Izvorni put je predugačak”? U ovom članku ću vam reći kako lako i jednostavno, bez ikakvih programa, pobijediti ovu pošast skraćivanjem naziva datoteke.

Put do izvora je predug – zašto?

Želio bih odmah da objasnim zašto se pojavljuje takvo sistemsko upozorenje i nije moguće izvršiti osnovne radnje kopiranja ili brisanja na fajlu (folderu)...

Samo obavještenje sadrži odgovor na ovo pitanje - sistem podataka Windows ne podržava (ne razumije) imena izvornih datoteka duža od 255 znakova.

Ali naziv vaše datoteke ili fascikle je kratak, na primjer, “Fotografije sa odmora”? Činjenica je da „glupi“ sistem percipira čitavu putanju do datoteke kao njeno ime. Ako se vaš fajl ili folder nalazi negdje preduboko file manager, onda će njegovo ime za nju izgledati otprilike ovako...

Dakle, simboli imena su sakupljeni u grupu od više od 255 komada.

Kako u ovom slučaju izbrisati fajl ili folder koji se ne može izbrisati? Vrlo je jednostavno - trebate skratiti ime datoteke (putanja) preimenovanjem ugniježđenih foldera.

Kako izbrisati fajl sa dugim imenom

Na svom primjeru ću vam pokazati kako da izbrišete fajl sa dugim imenom koji, kako sistem piše, ima predugačak put do izvora.

Jučer sam odlučio očistite računar od starih rezervne kopije stranice, ali nisu željeli da budu izbrisani. Kao što ste pretpostavili, pojavilo se upozorenje da je put do izvora predugačak...

Počevši od prvog foldera na ovom dugom putu, preimenovao sam nekoliko stvari...

...i ponovo pokušao da se riješi fajla sa sada više kratko ime— sigurno je otišao u zemlju izbrisanih fajlova.

Naravno, ime novog fajla (fascikle) treba da se sastoji od jednog znaka ili broja, kao u mom primeru.

Tako se lako rješava problem brisanja datoteka ili mapa sa dugim imenom. Nije jedina metoda Svakako. Može specijalni programi izbrisati ili preko registra - upravo sam pokazao ručna metoda. Nekima će to trajati samo minut, drugima pola sata - na vama je da odlučite kako skratiti naziv datoteke i predugačak put do izvora.

Do novog korisni savjeti i zanimljivih kompjuterskih programa.

Evo primjera strukture mapa koju sam nazvao "velika lutka":

Kao što vidite, na disku “D” (Podaci) postoji izvorni folder video, u njemu se nalazi folder “Filmovi”, u njemu “Sve što vam je potrebno za gledanje filmova” i zatim na isti način folder unutar foldera. U isto vrijeme, mnoge mape imaju duga imena i imena - više od 10-15 znakova, što će ukupno dati volumen znakova u svim imenima više od 260. A ako se na kraju takve "matrjoške" nalazi fajl, onda se može ispostaviti da ne možete raditi s njim, možete... Ponekad vam sam sistem ne dozvoljava da na kraju kreirate folder ili fajl veći od dozvoljena količina simbole, ali ponekad se iz nekog razloga to dogodi.

Prvo, za početnike, objasnit ću što je put do datoteke i mape. Putanja je takozvana adresa na računaru na kojoj se nalazi datoteka ili fascikla. Na primjer, datoteka pod nazivom “My file.txt” nalazi se na lokalnom disku D: u folderu “Documents”. Tada će put do ove datoteke izgledati ovako:

D:\Documents\My file.txt

Ili, na primjer, ovako će izgledati putanja iz gornjeg primjera, gdje sam pokazao složenu strukturu foldera.

Kao što vidite, broj znakova na gornjoj putanji je velik i moguće je da će na kraju biti datoteka ili mapa sa dugo ime, koje ne možete izbrisati.

Kada pokušate da izbrišete datoteku sa dugačkim imenom putanje, dobićete prozor sa greškom poput ove:

Pokušao sam vještački rekreirati problem i evo šta sam dobio.

Na drajvu “D” sam napravio fasciklu sa kratkim imenom “1” i u nju stavio fajl sa veoma dugim imenom. Evo primjera:

Sada također preimenujem tu mapu "1" u neko jako dugo ime, na primjer:

Zanimljivo, Windows vam slobodno dozvoljava da preimenujete fasciklu u tako dugo ime, uprkos činjenici da broj znakova u nazivu ove fascikle + naziv datoteke već premašuje 260! Pa, nakon preimenovanja foldera u dugo ime, više ne mogu izbrisati datoteku koja se nalazi u njoj i prikazati grešku.

Ili evo još jednog primjera... Održavam web stranicu Moskovskog koledža za izradu instrumenata, gdje sam ranije radio puno radno vrijeme, a ponekad koristim kopiju stranice na svom računaru da testiram neke nove „dobroće“ za stranicu. Šta ako instaliram nešto loše i web stranica na hostingu umre? :) I tako ga provjerim na svom kompjuteru i ako je sve u redu onda ga postavim na pravi web sajt koji se nalazi na hostingu. Tako sam jednom prebacio ceo sajt sa hostinga da testiram jednu stvar, a nakon što sam završio sa radom, odlučio sam da izbrišem folder sa sajtom sa svog računara. Na kraju krajeva, teži oko 6 GB. Cijela stranica je obrisana, osim nekoliko foldera. Počeo sam tražiti i vidio da oni folderi koji su sadržavali datoteku s dugim imenom u obliku hijeroglifa nisu izbrisani:

Ponovo sam pokušao da izbrišem ovu datoteku sa dugim imenom i vidio sam istu grešku koju sam spomenuo gore. Pokušao sam da ga preimenujem, ali ni to ne radi. Pa, morao sam da razmislim kako da rešim problem.

Kako riješiti problem brisanja foldera/fajla sa dugim imenom putanje!

Pokušao sam na 2 načina da izbrišem folder/fajl sa dugim imenom na putu do njega. Oba nisu tehnički teška (posebno 1.), tako da mislim da se početnik može snaći ako uradi sve tačno kako ja pokazujem:

    Preimenujte više foldera u putanji datoteke u kraće ime. Ovo je najjednostavnije rješenje koje bi već trebalo mnogima pomoći! Pretpostavimo da imate datoteku u fascikli s vrlo dugim imenom koju ne možete izbrisati, otvoriti, kopirati i općenito ne možete raditi s njom.

    Zatim pokušajte jednostavno preimenovati mapu u kojoj se nalazi datoteka s dugim imenom, na primjer, u "1". Dozvolite mi da se vratim na jedan od gornjih primjera. Evo foldera sa dugim imenom:

    Preimenujem koristeći standard Windows Explorer ime te fascikle u "1" i ovako sada izgleda putanja do datoteke:

    Sada možete bezbedno raditi sa datotekom, sistem će vam omogućiti da je otvorite, preimenujete i izbrišete.

    Ako imate dugačko stablo foldera, tj. kao lutka za gniježđenje, u jednom folderu je drugi, u njemu je drugi, pa drugi, pa počnite preimenovati od prve mape iz ove lutke za gniježđenje. Ne sa poslednjim na listi, već sa prvim!

    Moguće je da su fascikle velika količina a preimenovanje nekih od njih neće raditi zbog iste greške ili će vam oduzeti dosta vremena. U ovom slučaju predlažem drugu metodu.

    Metoda je da možete uzeti neki folder, na primjer, u sredini zajedničkog stabla i povezati ga kao virtualni disk. Virtuelni disk je nešto što nas podsjeća na običan disk. lokalni disk, ali koji je jednostavno vezan za određeni folder, na primjer, za brzu interakciju s njim.

    Recimo da imate dug put ovako:

    D:\Video\Moji filmovi\Sve što je potrebno za gledanje filmova\Programi za gledanje filmova\Kako otvoriti MP4 filmove\Lista MP4 primjera filmova\Lista programa za otvaranje MP4\Šta ne treba raditi kada otvarate MP4 fajlove

    Pretpostavimo da u poslednjem folderu imamo nešto problematičan fajl, sa kojim ne možemo raditi, jer je put do njega, kao što vidimo, prilično dug :)

    Možemo uzeti i povezati jedan od foldera sa dugim imenom na sredini putanje kao virtuelni disk. Neka ovo bude folder "Programi za gledanje filmova".

    Za povezivanje virtuelnog diska potrebna nam je takozvana Windows komandna linija, tj. konzola.

    Možete ga otvoriti putem Windows pretraga. U pretragu upišite “Command Line”:

    U prozoru komandne linije treba da ukucamo naredbu:

    subst virtual_disk_letter "put_do_folder"

    Možete staviti bilo koje slovo diska, sve dok već nije zauzeto jednim od lokalni diskovi. Na primjer, imate lokalni disk C i D, što znači da više ne možete pozvati virtualni pogon istim slovom. Možete ga nazvati, na primjer, slovom "X", jer se rijetko koristi u Windowsima.

    Za putanju fascikle umetnete putanju do fascikle koju želite da povežete kao virtuelnu. Kao što sam već rekao, u mom primjeru ćemo napraviti "Programe za gledanje filmova" kao virtuelnu mapu, što znači da putanju treba navesti ovako:

    D:\Video\Moji filmovi\Sve što je potrebno za gledanje filmova\Programi za gledanje filmova\

    Dakle, konačna komanda u mom slučaju će izgledati ovako:

    subst X: “D:\Video\Moji filmovi\Sve što je potrebno za gledanje filmova\Programi za gledanje filmova\”

    Da biste izvršili unesenu komandu, pritisnite tipku “Enter” na tastaturi. Virtuelni disk će biti kreiran.

    Sada idemo u Windows Explorer, idite na odjeljak "Ovaj PC" (ili "Računar") i tamo vidite kreirani virtuelni disk:

    Možete ga razlikovati po slovu. Dodijelio sam slovo "X" virtuelnom disku. Sada ako otvorimo ovaj virtuelni disk, odmah ćemo se naći u folderu „Programi za gledanje filmova“. One. uzeli smo i odsjekli pola puta do konačnog foldera.

    Za poređenje...

    Ranije je put do konačnog foldera izgledao ovako:

    D:\Video\Moji filmovi\Sve što je potrebno za gledanje filmova\Programi za gledanje filmova\Kako otvoriti MP4 filmove\Lista MP4 primjera filmova\Lista programa za otvaranje MP4\Šta ne treba raditi kada otvarate MP4 fajlove

    Nakon povezivanja virtuelnog diska u folder "Programi za gledanje filmova", put do završne mape izgleda ovako:

    X:\Kako otvoriti MP4 filmove\Lista MP4 primjera filmova\Lista programa za otvaranje MP4\Šta ne treba raditi prilikom otvaranja MP4 datoteka

    Osjećate li razliku? Put je skraćen za pola, pošto nas slovo disk jedinice odmah usmjerava na mapu na sredini putanje :) A pošto je putanja jako skraćena, vjerovatno ste sada uklonili ograničenje znakova u nazivima datoteka i mapa i hoćete biti u mogućnosti da izbrišete fajl ili folder sa dugim imenom!

    Nakon što riješite problem sa datotekom, virtuelni disk se može ponovo izbrisati kako ne bi postao ranica na oku u Exploreru.

    Da biste to učinili, ponovo otvorite komandnu liniju Windows string i unesite naredbu:

    Subst virtual_disk_letter /d

    U mom slučaju slovo pogona je "X", tako da bi komanda izgledala ovako:

Kada sam razmišljao o opcijama za rješavanje problema, kako izbrisati mapu ili datoteku s dugim imenom, pronašao sam drugu opciju na Internetu: izbrišite problematičnu datoteku putem programa “ Total Commander" Probao sam, nije išlo, zato nisam preporučio ovu metodu :)) A metoda, čak i da nekome radi, iskreno nije zabavna, jer morate instalirati dodatni program na vaš računar radi brisanja samo jedne datoteke ili fascikle sa dugim imenom...

Mislim kada se to dogodi sličan problem problem, s kojim sam se susreo više puta, jedna od gore opisanih metoda sigurno će vam pomoći.

To je sve! Vidimo se uskoro u narednim člancima ;)

Najbolji članci na ovu temu