获取非URI位置

时间:2011-03-16 19:44:30

标签: c# io uri

当我这样做时

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

我有file:\\...(URI位置)。如何获取c:\... not-URI 位置)?

修改

Folders类的代码是:

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 个答案:

答案 0 :(得分:2)

Path.Combine添加最后一个组件,您需要从Folders.Data中删除文件:\

你可以做这样的事情

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

对于明确的解决方案,尝试使用Assembly.Location,如图所示here这就是你想要的。


所以不要使用:

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

使用:

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

答案 1 :(得分:2)

使用Location属性获取位置:

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

编辑:

关于Location属性from MSDN的一些注释:

  

获取的路径或UNC位置   加载的文件包含   清单。

     
     

[返回]加载文件的位置   包含清单。如果加载   文件被阴影复制,位置   是之后的文件   影像复制。如果组件是   从字节数组加载,例如何时加载   使用Load(Byte [])方法   重载,返回的值是   空字符串(“”)。

     
     

获取文件前的位置   已被影子复制,使用   CodeBase属性。

     
     

[可以引发] NotSupportedException   当前组件是动态组件,   由AssemblyBuilder代表   对象

答案 2 :(得分:2)

如果你有一个file:// URI,你可以将它转换为这样的正常路径:

var fileUri = Folders.Data;
var asPath = new Uri(fileUri).LocalPath;