|
Тема
|
UNC Paths
|
|
Автор |
e-de (чакащ) |
Публикувано | 17.11.01 16:33 |
|
Имам въпрос:
Как мога да обърна път към фаил на локален диск в UNC път?
т.е как C:\Projects\Readme.txt
да стане \\dev_host\projects\readme.txt
| |
Тема
|
Re: UNC Paths
[re: e-de]
|
|
Автор |
Balam (непознат
) |
Публикувано | 17.11.01 17:18 |
|
e-de, ako znaesh sus sigurnost, che "Projects" shte bude vinagi share na "devhost" kum "C:\Projects", nachi ti triabva samo string manipulaciata, kakto ti si ia napravil veche. Ako puk ne znaesh kakvi shares ima na "devhost", triabva da si gi enumerirash sam i da si namerish nai-podhodiashtata za oformiane na UNC-to. S funkciite NetShareEnum() i NetShareGetInfo() mozesh da si napravish cikul za namirane na share otgovariastha (ili pone vodeshta) do tvoia fail. Ne zabraviai, che enumeriraneto moze da ti vurne poveche ot 1 share vodeshta kum faila, pri koeto polozenie ti triabva da si izberesh nai-podhodiashtata za celta (da rechem po access rights).
Uspeh!
| |
Тема
|
Re: UNC Paths
[re: Balam]
|
|
Автор |
e-de (чакащ) |
Публикувано | 19.11.01 14:29 |
|
тоя път, който съм дал за пример е само за пример, приложението трябва да се оправя с обработване на drag/drop фаилове, чийто пътища да се обръщат до UNC формат.
това за enumerate на шеровете го имам като идея, обаче ме мързи да го правя, освен това няма начин да няма нещо в някое API което да се занимава точно с тая работа.
в случая целта е по-скоро образователна, а не решаване на спешен проблем.
10х за вниманието, всепак
| |
|
WNetGetUniversalName(), обаче при локален път (каквото май ти трябва) връща грешка ERROR_NOT_CONNECTED.
| |
|
mi imenno kogato e lokalen patia e interesno.
za mapnat drive ili za neshto ot Entire Network v Delphi-to ima gotova funcia ExpandUNCFileName/vzeta ot niakoe API, ama neznam koe/ koiato dopalva/obrashta pat do UNC format. obache raboti samo za NON local paths.
zamomenta problema e fix-nat s enumerate na sherovete, no az prodaljavam da si tarsia reshenie po drug nachin - niama nachin da niama neshto koeto horata ot MS da sa si napravili, vaprosa e da go otkria.
| |
|
apropo, NetGetUniversalName mislia shte mranka za user prava - mislia che iskashe niakakaw admin /domain ili neshto ot toia sort/?
| |
Тема
|
Re: UNC Paths
[re: e-de]
|
|
Автор |
Balam (непознат
) |
Публикувано | 20.11.01 20:45 |
|
e-de, ne si gubi vremeto s tursene na API... Takova niama da namerish, zashtoto e nevuzmozno da se napishe ot MS. Ei ti edin primer (za po-lesno si predstavi che e samo za Win9xME), i shte razberesh sam zashto:
Vzemi proizvolen fail, da rechem C:\DIR1\DIR2\DIR3\DIR4\FILE.EXT.
OS-a ima slednite 4 shares, i suotvetno, 4 razlichni UNC-ta za dostup do faila:
C:\DIR1 -> "SHARE1" (read only access bez parola)
C:\DIR1\DIR2 -> "SHARE2" (read only access s parola)
C:\DIR1\DIR2\DIR3 -> "SHARE3" (read write access bez parola)
C:\DIR1\DIR2\DIR3\DIR4 -> "SHARE4" (read only access s parola)
Zapitai se sega, ako Windows imashe edna edinstvena funkcia, koiato da ti vurne UNC na toia fail, koi ot vsichkite vuzmozni varianti sthe vurne? Kak tazi funkcia da znae kakuv tochno user shte pravi access na faila, po kakuv nachin, i dali izobstho usera shte ima prava za access do tozi fail po vurnatoto UNC?
V NT neshtata stavat dori po-slozni... Ta za tova MS ti predostaviat APIs za enumeracia, i ot tam ti moze da si izberesh kakuv UNC da polzvash. Samo ti si toia koito znae pretenciite na user-a.
Uspeh.
| |
Тема
|
Re: UNC Paths
[re: e-de]
|
|
Автор | xyz (Нерегистриран) |
Публикувано | 21.11.01 13:02 |
|
Правих точно такова нещо преди 2 години.
По принцип използвах WNetGetUniversalName, но допълнително имам една таблица (списък) със всички шаринги на локалния компютър, която съставям runtime чрез WNetEnumResource и NetShareGetInfo. По нататък, когато WNetGetUniversalName върне грешка, търся името във въпросната таблица и го заменям.
Това работи горе-долу приемливо, като се има предвид възможностите за нееднозначност при конкретен избор на шаринги - взима първия подходящ шаринг и толкова.
Работата с тези функции малко се усложнява заради версиите Win95/98/NT. Например NetShareGetInfo се взема от svrapi.dll при Win95/98 или от netapi32.dll при NT.
Това е моето решение по принцип.
Нямам нищо против да ти изпратя моя сорс.
Ако ти трябва, пиши ми на е-майла и ще ти го изпратя по пощата.
xyz@rambler.bg
| |
Тема
|
10х
[re: e-de]
|
|
Автор |
e-de (чакащ) |
Публикувано | 21.11.01 13:27 |
|
благодарско на всички, който писаха, явно няма да се намери решение от вида, който аз търсех.
заобиколното решение /с enumerate local shares/ така или иначе съм го реализирал.
| |
|
|
|
|