DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Programiranje (http://www.devprotalk.com/forumdisplay.php?f=23)
-   -   Long paths in .NET (http://www.devprotalk.com/showthread.php?t=9022)

eraser 13. 08. 2010. 17:19

Long paths in .NET
 
Imam desktop C# 2008 projekat koji koristi DynaZip komponentu.
Problem je sledeci: Cesto se pojavljuju arhive koje imaju dugacak naziv fajla a isti takav je naziv prvog foldera u arhivi, pa tek onda ide struktura foldera i fajlova koja je sustina same arhive.

Kada pokusavam da izvucem neki fajl iz arhive on se smesta u Win temp folder, npr:
Citat:

C:\Documents and Settings\test\Local Settings\Temp\Agilent Analytical Data Viewer\1131c4760ff24becac07a5cc2231ac29\1111111111 11111111111111111111111111111111111111111111111111 1111_19971025-002104-HPWBM187-LEO-1046-Administrator-DEMO-DEMODADN.d\CHROMS\00000001.WMF
tako da dobijem cesto putanje koje su duze od 260 karaktera, sto je Win ogranicenje i imam razne probleme kod prikaza fajlova.
Da neko nije imao slican problem ili neko ima ideju kako bih mogao da prevazidjem problem. Napomena da se zip fajlovi kreiraju ko zna gde i da nije moguce uticati na strukturu kako se kreira ime arhive.
Program radi tako sto ne unzipuje celu arhivu vec po potrebi ucita fajl u temp folder i prikaze ga odatle.
Nadam se da sam uspeo da objasnim u cemu je problem.

LiquidBrain 13. 08. 2010. 18:17

Probaj da promenish temp folder tako da stavish da bude u recimo C:\TMP...

Tu cesh da ustedish na jedno cetrdesetak karaktera... :)

mileusna 13. 08. 2010. 19:34

Ne znam koliko pomaže, ali svaki long filename bi trebao da ima i svoj ekvivalent u skraćenom obliku. Skraćene nazive fajlova iz komandne linije možeš da dobiješ kada otkucaš dir /X
Kôd:

C:\PROGRA~1>dir /X
 Volume in drive C is System
 Volume Serial Number is 8A14-5F09

 Directory of C:\PROGRA~1

14.07.2009  07:32    <DIR>          REFERE~1    Reference Assemblies
16.11.2009  13:59    <DIR>          TORTOI~1    TortoiseSVN
14.07.2009  07:37    <DIR>          WINDOW~3    Windows Defender
14.07.2009  09:47    <DIR>          WI0FCF~1    Windows Journal
12.05.2010  20:26    <DIR>          WINDOW~1    Windows Mail
08.11.2009  17:44    <DIR>          WI54FB~1    Windows Media Player
14.07.2009  07:32    <DIR>          WINDOW~2    Windows NT

Znači npr. prema ovom gore listingu ti bi sa pathom C:\PROGRA~1\WI54FB~1\ dospeo u folder C:\Program Files\Windows Media Player\ sa velikom uštedom na broju karaktera.

Ne znam konkretno da li ti ovo pomaže pošto ne razumem problem u potpunosti. Mada ako ovaj short file name može da se izvuče preko .NET frejmvorka, verujem da bi ti to sve rešilo.

Edit: Izgleda da može iz .NET direktnim pozivom API funkcije GetShortPathName.

eraser 20. 08. 2010. 10:34

Citat:

Originalno napisao mileusna (Napišite 87678)
Mada ako ovaj short file name može da se izvuče preko .NET frejmvorka, verujem da bi ti to sve rešilo.

Ako se fji. File.Exist() prosledi ShortFileNamePath izgleda da ga ona ipak konvertuje u LongName tako da fajl ne bude prepoznat da postoji.
Nekako sam uspeo da prepravim app da koriscenjem UNICODE verzija odredjenih API fja. uspe da se izbori sa dugim putanjama (tako se maksimalna duzina povecava na 32000 karaktera)

Kôd:

[DllImport("kernel32", CharSet = CharSet.Unicode)]
public static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);



Vreme je GMT +2. Trenutno vreme je 01:16.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.