【问题标题】:Opening a file by passing in absolute file path通过传入绝对文件路径打开文件
【发布时间】:2017-04-16 07:10:21
【问题描述】:

我目前正在为我想为我的程序打开和读入的文件存储一个文件路径。但是,当我将该路径放入 File.OpenText 时,它会将当前目录的路径添加到文件路径中,然后出现此错误:

DirectoryNotFoundException: Could not find a part of the path "/Users/km/Desktop/MP/file:/Users/km/Downloads/PT07E.obj".

我要的路径就是我传入的那个,就是file:/Users/km/Downloads/PT07E.obj"。

有没有办法阻止 File.OpenText 添加到我最初传入的路径中?

【问题讨论】:

    标签: c#


    【解决方案1】:

    如果您使用file:/{absolute path}(实际上是URI)这样的路径进行操作 您可以使用System.Uri 类。
    this answer

    var uri = new Uri("file:/Users/km/Downloads/PT07E.obj");
    using (var reader = File.OpenText(uri.AbsolutePath))
    {
       ...
    }
    

    【讨论】:

    • 谢谢!这似乎已经解决了问题
    【解决方案2】:

    您必须添加正确的绝对路径 - 这意味着您忘记定义驱动器(通常是 C)。所以你的路径必须是(我会使用反斜杠):

    @"C:\Users\km\Downloads\PT07E.obj"
    

    但是,最好不要为此使用绝对路径。我会使用 c# 的 specialFolder 选项:

    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downlads", "PT07E.obj");
    

    使用Path.Combine 总是一个好主意,它使用操作系统的标准路径拆分器。

    【讨论】:

    • 当我将它硬编码到 File.OpenText 中时,不幸的是,我仍然得到与以前相同的添加
    • 您是否遇到完全相同的异常?或者该文件可能甚至不存在?但你的异常实际上很有趣——它说它找不到路径的部分,也找不到目录。请提供新的异常(如果不同)和您尝试过的代码。
    • 并确保您有权访问该文件夹
    • @Middleground3 那么您的用户名到底是什么?公里或公里?最合理的错误来源是您输入了错误的目录名称。您是否尝试过我提供的第二种方法(使用特殊文件夹)?
    • 所以现在我收到 FileNotFoundException,FileNotFoundException:找不到文件“/Users/km/Desktop/MP/C:\Users\km\Downloads\PT07E.obj”。我将您的建议硬编码到 File.OpenText() 中,问题是它仍在将当前目录的路径添加到路径中,而不是仅使用我传入的绝对路径打开文件。
    猜你喜欢
    • 2020-08-09
    • 2022-10-24
    • 2021-05-31
    • 2012-06-19
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多