преобразование URI

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

преобразование URI

Сообщение Dmitriy Solomnikov » 20.02.2006 (Пн) 16:26

есть путь к файлу в URI формате. Как можно получить путь в простом (человеческом :) ) виде (ничего не парся)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.02.2006 (Пн) 17:32

непонял, есть http://site:12345/asd

что нужно получить?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 20.02.2006 (Пн) 17:47

ну...там может быть что-то типа "http://www.vbstreets.ru", а может и "file:///C:/text.txt"

когда я вызываю System.IO.File.Exist(...) - ругается пишет, что не работает с URI. Собственно интересует есть штатгые средства преобразование URI к др. виду?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 20.02.2006 (Пн) 18:20

Dmitriy Solomnikov

да, есть... ToString :lol:

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 20.02.2006 (Пн) 18:25

Ramzes писал(а):Dmitriy Solomnikov

да, есть... ToString :lol:

у какого объекта?

пока я это делаю руками, вот так:
Код: Выделить всё
Public Shared Function ParceURI(ByVal URI As String)
        If URI.IndexOf("file:///") = -1 Then
            Return Nothing
        End If

        Dim s As String = Microsoft.VisualBasic.Right(URI, URI.Length - 8)
        s = Microsoft.VisualBasic.Replace(s, "/", "")

        If System.IO.File.Exists(s) = False Then
            s = Nothing
        End If
        Return s
    End Function


и получаю для URI file:///C:/h.xml
вот такое представление: c:\h.xml

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.02.2006 (Пн) 18:36

тогда ещё %20 заменяй на пробелы...
Изображение

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 21.02.2006 (Вт) 10:23

tyomitch писал(а):тогда ещё %20 заменяй на пробелы...


а %20 - это что такое?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.02.2006 (Вт) 10:26

Это пробел...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 21.02.2006 (Вт) 11:06

Dmitriy Solomnikov
%20 это пробел в шеснадцатеричном коде :)
----

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 21.02.2006 (Вт) 18:55

Код: Выделить всё
Option Explicit

Public Const MAX_PATH = 260

'Takes a file URL and converts it to a Microsoft MS-DOS path
'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathcreatefromurl.asp
Public Declare Function PathCreateFromUrlA _
Lib "shlwapi.dll" ( _
        ByVal pszUrl As String, _
        ByVal pszPath As String, _
        ByRef pcchPath As Long, _
        ByVal dwReserved As Long _
    ) As Long

Public Function PathCreateFromUrl(ByVal URL As String) As String
   
    Dim res As Long
    Dim Path As String
    Dim PathLen As Long
   
    Path = Space$(MAX_PATH)
    PathLen = MAX_PATH
    res = PathCreateFromUrlA(URL, Path, PathLen, 0)
   
    If (res = 0) Then PathCreateFromUrl = Left$(Path, PathLen)
   
End Function


Immediate:
Код: Выделить всё
?PathCreateFromUrl("file:///C:/h%20x.xml")
C:\h x.xml



PS: Снова проглядел раздел :(. Это, конечно же, для VB6. А в NET'е API работают?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2006 (Ср) 5:31

Угу... работают...

Тока это...

Код: Выделить всё
Dim u As New Uri("file:///C:/h%20x.xml")
Console.WriteLine(u.LocalPath)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 22.02.2006 (Ср) 10:43

чего не так?
Код: Выделить всё
..................
Dim res As IntPtr
res = PathCreateFromUrlA("file:///C:/h.xml", Path, PathLen, 0)


HRESULT - это в какой тип преобразуется (и что из себя представляет)?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2006 (Ср) 12:05

Dmitriy Solomnikov писал(а):HRESULT - это в какой тип преобразуется (и что из себя представляет)?

.net strikes again...


Не знаешь, так посмотри на один пост выше.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 22.02.2006 (Ср) 12:07

тогда вот это почему вылезает:
PInvoke restriction: can not return variants.


вот импорт
<System.Runtime.InteropServices.DllImportAttribute("shlwapi.dll")> Public Function PathCreateFromUrlA(ByVal url As String, ByVal path As String, ByVal maxpath As String, ByVal res As String)
End Function


вот сам код
Dim res As Long
Dim Path As String
Dim PathLen As Long

Path = Space$(255)
PathLen = 255
res = PathCreateFromUrlA("file:///C:/h.xml", Path, PathLen, 0)
Console.WriteLine(Path)
Console.ReadLine()

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2006 (Ср) 12:19

Dmitriy Solomnikov
Ты вообще сказанное как-то воспринимаешь и анализируешь или нет? :roll:

http://bbs.vbstreets.ru/viewtopic.php?p=6587172#6587172
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 103

    TopList