Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Uklanjanje dugih naziva datoteka. Krenite na dugi put (ili zbogom MAX_PATH)

Uklanjanje dugih naziva datoteka. Krenite na dugi put (ili zbogom MAX_PATH)

Mnogi korisnici Windows računala, a da ne spominjemo programere, upoznati su s problemima s dugim (više od 260 znakova, MAX_PATH) putevima datoteke ili direktorija.

Ovaj članak govori o tome kako se riješiti ovog zaostatka pri razvoju aplikacija na različitim platformama (WinApi, .Net Framework, .Net Core) i aktiviranju izvorne podrške za duge putove u sustavu Windows 10 (Anniversary Update).

Win API aplikacije

U aplikacijama koje koriste Win API za rad s datotekama, recept za uklanjanje ograničenja MAX_PATH poznat je od pamtivijeka - za rad s direktorijem bilo je potrebno koristiti Unicode verziju funkcije sa završetkom "W". ili datoteku i započnite put s \\? \ prefiksom. To je omogućilo korištenje staza duljine do 32767 znakova.

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

To je utjecalo na sljedeće funkcije:

Za rad s imenicima: CreateDirectoryW, CreateDirectoryExW, GetCurrentDirectoryW, RemoveDirectoryW, SetCurrentDirectoryW. A za rad s datotekama: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFileAttributesExW, SetFileAttributesW, GetFullPathNameW, GetLongPathNameW, MoveFileW, MoveFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, FindNextStreamW, GetCompressedFileSizeW, GetFinalPathNameByHandleW.


To eliminira potrebu za korištenjem prefiksa \\? \ i potencijalno daje aplikacijama koje rade izravno ili neizravno preko Win API-ja da dobiju podršku za duge putove bez potrebe za ponovnom izgradnjom. Kako aktivirati ovu značajku opisano je na kraju članka.

.Net Framework

Iako .Net Framework koristi Win API za rad s datotekama, prethodna promjena ne bi imala učinka, budući da BCL kod ima ugrađene preliminarne provjere valjanosti duljine naziva direktorija i datoteka, a nije stigao ni do poziva Win API funkcija, što je izazvalo dobro poznatu iznimku. Prema popularnom zahtjevu zajednice (više od 4500 na UserVoiceu), u verziji 4.6.2, provjere ograničenja duljine putanje uklonjene su iz BCL koda, ostavljajući ga na milost i nemilost operacijskom sustavu i datotečnim sustavima!

Evo što radi:

  • Kada koristimo prefiks “\\? \” možemo raditi s dugim stazama kao u Win API-ju, Directory.CreateDirectory ("\\\\? \\" + long_dir_name);
  • Ako omogućite izvornu podršku za duge nazive datoteka u sustavu Windows 10 (1607), nećete ni morati koristiti prefiks!
Kako uključiti:
  • Koristite .Net Framework 4.6.2 kao cilj kada gradite svoju aplikaciju.
  • Koristite konfiguracijsku datoteku, na primjer, ako je aplikacija već sastavljena za .Net 4.0:

.Net Core

Ovdje je podrška dugim putovima najavljena još u studenom 2015. godine. Očigledno je utjecala priroda projekta otvorenog koda i nepostojanje stroge potrebe za osiguranjem kompatibilnosti unatrag.

Kako uključiti:
Sve radi iz kutije. Za razliku od implementacije u .Net Framework - nema potrebe za dodavanjem prefiksa "\\? \" - dodaje se automatski ako je potrebno.

Evo primjera.

Kako omogućiti dugotrajnu podršku u sustavu Windows 10 (1607)

Ova je značajka onemogućena prema zadanim postavkama. To je zato što je ova značajka eksperimentalna i postoji potreba za podešavanjem različitih podsustava i aplikacija za punu podršku.

Možete omogućiti ugrađenu podršku za duge putove stvaranjem ili izmjenom sljedeće vrijednosti 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čunala> Administrativni predlošci> Sustav> Datotečni sustav> Omogući NTFS duge putove. Također je u lokaliziranoj verziji: Konfiguracija računala> Administrativni predlošci> Sustav> Sustav datoteka> Omogući Win32 duge staze.

Nadalje, izvori se ne slažu oko manifesta (ili sam krivo razumio, ali trenutno nemam načina provjeriti). Na primjer, MSDN dokumentacija kaže da se manifest može koristiti kao alternativni način za aktiviranje dugotrajne podrške u pojedinačnim aplikacijama, a MSDN blog navodi da je to drugi potrebni korak nakon aktivacije u politikama.
Ali slažu se u formatu navođenja ove opcije:

pravi
Nažalost, s CMD-om to trenutno neće raditi zbog posebnosti rada sa stazama, ali u PowerShellu bi sve trebalo funkcionirati.

p.s.

Ovim završavam moj mali post u petak, ostavljajući izvan okvira pitanja cjelovitosti implementacije podrške za duge staze u sustavu Windows 10 (1607), odnosno performansi pri korištenju različitih kombinacija Windows izdanja, datotečnih sustava i API-ja. Kako budu stizale nove činjenice i eksperimentalni rezultati, objava će se ažurirati.

Hvala na pažnji!

Dobili smo dugačak naslov, ali on ukazuje na bit problema, koji će ovdje biti opisan. Nedavno sam upao u ne tako dobru situaciju. Razvrstavajući tvrdi disk i brišući ga od nepotrebnih, ustanovio sam da jedna od datoteka nije obrisana te se pojavila pogreška sljedećeg sadržaja: “Datotečni sustav ne podržava tako dugačke nazive izvornih datoteka. Pokušajte premjestiti datoteku u mapu s kraćom duljinom puta ili navedite kraći naziv datoteke i pokušajte ponovno."

Ne samo da nisam mogao izbrisati datoteku, već nisam uspio ni promijeniti naziv u kraći naziv. Mnogima bi to izgledalo kao slijepa ulica, jer se ispostavilo da datoteka nije izbrisana.

Zapravo, problem se rješava vrlo jednostavno i brzo, a sada ću opisati dvije metode za njegovo rješavanje, a koji ćete koristiti, na vama je.

Što ako je put do izvora predugačak, kako izbrisati takvu datoteku?

Ako postoji datoteka koja nije izbrisana zbog dugog naziva, postoji nekoliko načina za rješavanje problema. Na primjer, datoteka je ugniježđena u nekoliko direktorija, recimo, pet ili čak deset mapa, koje imaju nazive od 10-20 znakova svaka, onda to može biti razlog da se datoteka ne briše. Poanta je da Windows ne podržava datoteke s više od 260 znakova u nazivu. Ako je ovo ograničenje prekoračeno, pojavit će se pogreška koju sam gore prikazao. Broj mapa koje imaju vlastite nazive i sam naziv datoteke moraju biti manji od 260 znakova. Sustav također ima jednu značajku - ako je to ograničenje prekoračeno, još uvijek možemo preimenovati mape. To znači da morate preimenovati sve mape u kratki naziv, na primjer, slovo ili broj.


Ovaj se problem može pojaviti ne samo zato što ste dali tako dugo ime. To mi se dogodilo kada sam odlučio preuzeti datoteke stranica sa servera i učiniti nešto. Budući da datoteke više nisu bile potrebne, izbrisao sam cijeli direktorij s datotekama web-mjesta, ali kako se pokazalo, on je sadržavao datoteku s vrlo dugim nazivom, plus nazive mapa, a to mi nije omogućilo da izbrišem sve ovaj.

Metoda dva pomoći će ako prvi nije uspio. Činjenica je da se sve mape koje vode do datoteke s dugim imenom ne mogu preimenovati, a pogreška datotečnog sustava i dalje će se pojaviti. Zatim možete stvoriti virtualni disk koristeći bilo koju podmapu koja vodi do neizbrisane datoteke. Sada ću vam pokazati kako to učiniti.

Otvaramo naredbeni redak. Da biste to učinili, pritisnite kombinaciju Win + R i unesite naredbu cmd... Možete kliknuti desnom tipkom miša na izbornik Start (ili tipkovnički prečac Win + X) i tamo odabrati Command Prompt.

Sada napišete naredbu poput ove, koja će nam napraviti virtualni disk:

Morate odabrati slovo pogona koje drugi ne zauzimaju. Particija sustava obično je označena slovima C, a druga particija, kao D ili E, tada biramo bilo koju drugu.

Put do mape mora biti naveden s diska. Ako vam je teško, otvorite mapu koja će djelovati kao virtualni disk i kopirajte put do nje u Exploreru na vrhu.

Moja naredba izgleda ovako:

Kada odemo na Moje računalo, tamo biste trebali vidjeti pogon sa slovom koje smo mu dodijelili iz naredbenog retka. Tako će se put do datoteke smanjiti za gotovo polovicu, što znači da ukupna duljina znakova može biti manja od 260 znakova. Sada se možete pokušati riješiti neuklonjivog.


Da biste izbrisali virtualni disk, morate unijeti naredbu:

subst DriveLetter / d

Korištenje Total Commandera

Na internetu sam otkrio metodu koja vam omogućuje brisanje datoteka koje se ne mogu ukloniti pomoću. Naravno, ovdje je nedostatak što morate instalirati dodatni softver na svoje računalo, a neće svi to htjeti učiniti. U svakom slučaju, ostavit ću ovu metodu ovdje, tko je odjednom želi koristiti.

Preuzmite i instalirajte program. Idite na karticu "Datoteka" kliknite na odjeljak "Promjena atributa"... Pojavljuje se prozor gdje uklanjamo čavke iz svih atributa. Ako nema kvačice na vrhu nasuprot stavke "Sadržaj direktorija procesa"- mi biramo. Sada pokušavamo izbrisati datoteku s dugim imenom iz istog programa.


Koristimo arhiver 7-Zip

Za ovaj slučaj nam je potreban 7-Zip arhiver. Desnom tipkom miša kliknite početni direktorij i pokažite mišem na particiju "7-Zip" i odaberite stavku "Dodaj u arhivu".

Pojavljuje se prozor u kojem trebate označiti samo jedan potvrdni okvir "Izbriši datoteke nakon kompresije"... Zatim kliknite OK.

Arhiva svega toga se stvara na radnoj površini, a mape s dugačkom datotekom jednostavno se brišu. Samu arhivu možete izbrisati bez problema.

Razmotrili smo takve načine da popravimo pogrešku neobrisane datoteke. Možda imate više opcija kako to učiniti?

Štetni operativni sustav Windows ne dopušta vam brisanje datoteke i viče da ima "Predug put do izvora"? U ovom članku ću vam reći kako je lako i jednostavno, bez ikakvih programa, pobijediti ovaj napad skraćivanjem naziva datoteke.

Predug put do izvora – zašto?

Želim odmah objasniti zašto se pojavljuje takvo upozorenje sustava i nije moguće izvršiti elementarne radnje kopiranja ili brisanja s datotekom (mapom) ...

Sama obavijest sadrži odgovor na ovo pitanje – datotečni sustav Windows ne podržava (ne razumije) nazive izvornih datoteka dulje od 255 znakova.

Ali imate li kratko ime datoteke ili mape, na primjer, "Fotografija s odmora"? Poanta je da "glupi" sustav uzima cijeli put do datoteke kao svoje ime. Ako vaša datoteka ili mapa leži negdje preduboko u upravitelju datoteka, tada će njezin naziv izgledati otprilike ovako...

Dakle, likovi imena skupljeni su u bandu od više od 255 komada.

Kako mogu izbrisati datoteku ili mapu koja se u ovom slučaju ne može izbrisati? Vrlo je jednostavno – trebate skratiti naziv datoteke (put) preimenovanjem mapa ugniježđenih jedna u drugu.

Kako izbrisati datoteku s dugim imenom

Na svom primjeru ću pokazati kako izbrisati datoteku s dugim imenom, koja, kako sustav piše, ima predug put do izvora.

Jučer sam odlučila očistite svoje računalo sa starih sigurnosnih kopija web-mjesta, ali nisu htjeli izbrisati. Kao što ste pretpostavili, postojalo je upozorenje o predugačkom putu do izvora...

Počevši od prve mape na ovom dugom putu - preimenovanih nekoliko dijelova ...

... i ponovno se pokušao riješiti datoteke sa sada kraćim imenom - sigurno je otišla u zemlju izbrisanih datoteka.

Naravno, novi naziv datoteke (mape) trebao bi se sastojati od jednog znaka ili broja, kao u mom primjeru.

Tako se lako rješava problem brisanja datoteka ili mapa s dugim imenom. Naravno, ovo nije jedina metoda. Limenka brisanje posebnim programima ili putem registra - upravo sam pokazao ručnu metodu. Nekome će za sve trebati minuta, a nekome pola sata - na vama je kako skratiti naziv datoteke i predugačak put do izvora.

Do novih korisnih savjeta i zanimljivih računalnih programa.

Evo primjera strukture mapa koju nazivam "velika lutka za gniježđenje":

Kao što vidite, na pogonu "D" (Podaci) nalazi se originalna video mapa, u njoj je mapa "Filmovi", u njoj "Sve što vam treba za gledanje filmova", a zatim na isti način mapa u mapi. U isto vrijeme, mnoge mape imaju dugačka imena 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 datoteku, onda se može ispostaviti da nećete raditi s njom, možete ... Ponekad vam sam sustav ne dopušta da na kraju napravite mapu ili datoteku koja premašuje dopušteni broj znakova, ali ponekad se iz nekog razloga to dogodi .

Na početku, za početnike, objasnit ću što je put do datoteke i mape. Put je takozvana adresa na računalu gdje se nalazi datoteka ili mapa. Na primjer, datoteka pod nazivom "My file.txt" nalazi se na lokalnom disku D: u mapi "Documents". Tada će put do ove datoteke izgledati ovako:

D: \ Dokumenti \ Moja datoteka.txt

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

Kao što vidite, broj znakova u gornjoj putanji je velik i moguće je da će na kraju biti datoteka ili mapa s dugim imenom koju ne možete izbrisati.

Kada pokušate izbrisati datoteku s dugim imenom puta, dobit ćete prozor s greškom poput ove:

Pokušao sam umjetno rekreirati problem i to je ono što sam dobio.

Na disku "D" napravio sam mapu s kratkim imenom "1" i stavio u nju datoteku s vrlo dugim imenom. Evo primjera:

Sada preimenujem tu mapu "1" u neki vrlo dugi naziv, na primjer:

Zanimljivo je da Windows slobodno dopušta preimenovanje mape u tako dugi naziv, unatoč činjenici da broj znakova u nazivu ove mape + naziv datoteke već premašuje 260! Pa, nakon takvog preimenovanja mape u dugi naziv, više ne mogu izbrisati datoteku koja se nalazi u njoj i prikazati grešku.

Ili evo još jednog primjera... Održavam stranicu Moskovske tehničke škole za izradu instrumenata, gdje sam prije radio puno radno vrijeme i ponekad za testiranje neke nove "dobrote" za stranicu koristim kopiju stranice na svom računalu. A što onda ako instaliram nešto loše i stranica na hostingu umre? :) I tako ga provjerim na svom računalu i ako je sve u redu, onda sam ga već postavio na pravu stranicu koja se nalazi na hostingu. Dakle, nakon što sam prebacio cijelu stranicu s hostinga da testiram jednu stvar, a nakon što sam završio s radom, odlučio sam obrisati mapu s web-mjestom sa svog računala. Uostalom, teži oko 6 GB. Cijela stranica je izbrisana, osim nekoliko mapa. Počeo sam tražiti i vidio da one mape koje su sadržavale datoteku s dugim imenom u obliku hijeroglifa nisu izbrisane:

Ponovo sam pokušao izbrisati ovu datoteku s dugim imenom i vidio sam istu grešku koju sam spomenuo gore. Pokušao sam ga preimenovati, ni to ne ide. Pa, morao sam razmišljati kako riješiti problem.

Kako riješiti problem brisanja mape/datoteke s dugim imenom puta!

Pokušao sam na 2 načina kako možete izbrisati mapu/datoteku s dugim imenom na putu do njih. Oba nisu tehnički teška (posebno 1.), pa mislim da se početnik može nositi s tim ako napravi sve točno kako ja pokazujem:

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

    Zatim jednostavno pokušajte preimenovati mapu koja sadrži datoteku s dugim imenom, na primjer, u "1". Vratit ću se na jedan od gornjih primjera. Evo mape s dugim imenom:

    Preimenujem naziv te mape u "1" kroz standardni Windows Explorer i ovako sada izgleda put do datoteke:

    Sada možete sigurno raditi s datotekom, sustav će je otvoriti, preimenovati i izbrisati.

    Ako imate dugo stablo mapa, t.j. poput lutke za gniježđenje, u jednoj mapi je druga, u njoj opet, pa opet, pa počnite preimenovati od prve mape iz ove lutke za gniježđenje. Ne od posljednjeg na popisu, nego od prvog!

    Možda postoji ogroman broj mapa i neke od njih možda nećete moći preimenovati zbog iste pogreške ili će vam to oduzeti puno vremena. U ovom slučaju predlažem drugi način.

    Način je da možete uzeti mapu, na primjer, usred zajedničkog stabla i spojiti je kao virtualni disk. Virtualni disk je nešto što nas podsjeća na obični lokalni disk, ali je jednostavno vezan za određenu mapu, na primjer, kako bismo s njom brzo stupili u interakciju.

    Recimo da imate dug put ovako:

    D: \ Videozapisi \ Moji filmovi \ Sve što trebate za gledanje filmova \ Programi za gledanje filmova \ Kako otvoriti MP4 filmove \ Popis primjera MP4 filmova \ Popis programa za otvaranje MP4 \ Što ne treba raditi pri otvaranju MP4 datoteka

    Pretpostavimo da u posljednjoj mapi imamo neku problematičnu datoteku s kojom ne možemo raditi, jer je put do nje, kao što vidimo, prilično pristojne dužine :)

    Možemo uzeti i povezati jednu od mapa s dugim imenom na sredini puta kao virtualni disk. Neka to bude mapa "Programi za gledanje filmova".

    Za spajanje virtualnog diska potreban nam je takozvani Windows naredbeni redak, t.j. konzola.

    Možete ga otvoriti putem Windows pretraživanja. U pretragu upišite "Command line":

    U prozoru naredbenog retka trebamo upisati naredbu:

    subst virtual_drive_letter "mapa_puta"

    Možete staviti bilo koje slovo pogona, samo da ga više ne zauzima neki od lokalnih diskova. Na primjer, imate lokalni disk C i D, što znači da ne možete nazvati virtualni pogon istim slovom. Možete ga nazvati, na primjer, slovom "X", jer ga rijetko tko koristi u Windowsima.

    Kao put do mape umetnete put do mape koju želite povezati kao virtualnu. Kao što sam već rekao, u mom primjeru napravit ćemo virtualnu mapu "Programi za gledanje filmova", što znači da se put mora navesti ovako:

    D: \ Videozapisi \ Moji filmovi \ Sve što trebate za gledanje filmova \ Programi za gledanje filmova \

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

    subst X: "D: \ Videozapisi \ Moji filmovi \ Sve što trebate za gledanje filmova \ Programi za gledanje filmova \"

    Za izvršenje unesene naredbe pritisnite tipku "Enter" na tipkovnici. Virtualni disk će biti kreiran.

    Sada idemo na Windows Explorer, idite na odjeljak "Ovo računalo" (ili "Računalo") i tamo pogledajte stvoreni virtualni disk:

    Možete ga razlikovati po slovu. Dodijelio sam slovo "X" virtualnom disku. Sada ako otvorite ovaj virtualni disk, odmah ćemo se naći u mapi "Programi za gledanje filmova". Oni. uzeli smo i prerezali nafig pola puta do završne mape.

    Za usporedbu ...

    Prije je put do odredišne ​​mape izgledao ovako:

    D: \ Videozapisi \ Moji filmovi \ Sve što trebate za gledanje filmova \ Programi za gledanje filmova \ Kako otvoriti MP4 filmove \ Popis primjera MP4 filmova \ Popis programa za otvaranje MP4 \ Što ne treba raditi pri otvaranju MP4 datoteka

    Nakon spajanja virtualnog diska na mapu "Programi za gledanje filmova", put do odredišne ​​mape izgleda ovako:

    X: \ Kako otvoriti MP4 filmove \ Popis uzoraka MP4 filmova \ Popis programa za otvaranje MP4 \ Što ne treba raditi pri otvaranju MP4 datoteka

    Osjećate li razliku? Put je skraćen na pola, budući da nas slovo pogona odmah usmjerava na mapu na sredini puta :) A budući da je put jako skraćen, vjerojatno ste sada uklonili ograničenje znakova u nazivima datoteka i mapa i možete izbrisati datoteku ili mapu s dugim imenom!

    Nakon što riješite problem s datotekom, možete ponovno izbrisati virtualni disk kako vam ne bi smetao očima u exploreru.

    Da biste to učinili, ponovno otvorite Windows Command Prompt i unesite naredbu:

    Subst virtual_disk_letter / d

    U mom slučaju, slovo pogona je "X", pa će naredba izgledati ovako:

Kad sam razmišljao o rješenjima problema, kako izbrisati mapu ili datoteku s dugim imenom, na internetu sam pronašao drugu opciju: izbrisati problemsku datoteku pomoću programa Total Commander. Isprobao sam, nije išlo pa nisam preporučio ovu metodu :)) A metoda, čak i ako je nekome uspjela, iskreno nije cool, jer morate instalirati dodatni program na svoje računalo kako bi za brisanje samo jedne datoteke ili mapa s dugim imenom...

Mislim da će vam, ako se pojavi sličan problem, s kojim sam se više puta susreo, svakako pomoći jedna od gore navedenih metoda.

To je sve! Vidimo se uskoro u sljedećim člancima ;)

Vrhunski povezani članci