2009-04-17 2 views
0

Каков правильный способ преобразования XML-URI в путь к файлу Windows?Создание пути Windows из URI XML

В качестве отправной точки, можно превратить:

file:///C:/DirA/DirB/File.txt 

в:

C:\DirA\DirB\File.txt 

... сначала сбросив file:/// подстроку (использовав его, чтобы определить, что мы имеем дело с локальный файл), а затем помещая обратную косую черту везде, где в исходной строке появляется косая черта. Это похоже на хорошее начало, но этого недостаточно. Например, URI может выглядеть следующим образом:

file:///C:/DirA/DirB/With%20Spaces.txt 

... который становится:

C:\DirA\DirB\With Spaces.txt 

... после замены% 20s с пробелами. Даже этого, однако, было бы недостаточно, так как может также быть необходимо иметь дело с другими такими encodings. Кроме того, некоторые из этих символов не будут легальными атрибутами имени файла Windows, поэтому необходимо определить, какие из этих кодировок действительны в именах файлов Windows и помечать ошибку, если что-то еще встречается.

Есть ли что-нибудь еще, что я забыл? Кто-нибудь хочет расширить это?

ответ

1

Вы должны использовать PathCreateFromUrl() для Windows.

См. Также The Bizarre and Unhappy Story of File: URLs.

+0

Я надеялся кто-нибудь подробно остановиться на самом процессе превращения URI в путь Windows, но в данных обстоятельствах я отмечаю ваш ответ как принятый. –

2

Используйте Uri.LocalPath.

string path = new Uri("file:///C:/folder/file.txt").LocalPath; 

Это платформа senstive, так path является "C:\folder\file.txt" на моей машине Windows.

Обратите внимание, что вы можете пойти другим путем (с пути локальной файловой системы в file URI) с помощью конструктора:

var uri = new Uri(@"C:\folder\file.txt"); 
Смежные вопросы