Получить местоположение без URI - PullRequest
2 голосов
/ 16 марта 2011

Когда я делаю

string s = Path.Combine(Folders.Data, fileName);

У меня есть file:\\... (местоположение URI). Как я могу получить c:\... ( not-URI местоположение)?

EDIT:

Код для класса папок:

public static class Folders
{
    public static string App
    {
        get
        {
            return Path.GetDirectoryName(
                Assembly.GetAssembly(typeof(Folders)).CodeBase
                );
        }
    }

    public static string Data
    {
        get
        {
            return Path.Combine(App, "Data");
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Получите местоположение, используя вместо этого свойство Location:

var path = Assembly.GetAssembly(typeof(Folders)).Location;

РЕДАКТИРОВАТЬ:

Несколько замечаний по свойству Location из MSDN :

Получает путь или UNC-расположение загруженного файла, содержащего манифест.


[Возвращает] Расположение загруженного файла, содержащего манифест.Если загруженный файл был скопирован тенями, то расположение файла после теневого копирования.Если сборка загружается из байтового массива, например при использовании перегрузки метода Load (Byte []), возвращаемое значение представляет собой пустую строку ("").


Чтобы получить местоположение дофайл был скопирован тенями, используйте свойство CodeBase.


[Может вызвать] NotSupportedException Текущая сборка является динамической сборкой, представленной объектом AssemblyBuilder.

2 голосов
/ 16 марта 2011

Если у вас есть file:// URI, вы можете преобразовать его в обычный путь следующим образом:

var fileUri = Folders.Data;
var asPath = new Uri(fileUri).LocalPath;
2 голосов
/ 16 марта 2011

Path.Combine добавляет последний компонент, вам необходимо удалить файл: \ from Folders.Data

Вы могли бы сделать что-то вроде этого

string s = Path.Combine(Folders.Data.Replace("file:\\",""), fileName);

Для ясного решения попробуйте использовать Assembly.Location, как показано здесь это то, что вы хотите.


Таким образом, вместо использования:

return Path.GetDirectoryName(
                Assembly.GetAssembly(typeof(Folders)).CodeBase
                );

Использование:

return Path.GetDirectoryName(
                Assembly.GetAssembly(typeof(Folders)).Location
                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...