【问题标题】:C# Path CsvReader - how to use absolute pathC# Path CsvReader - 如何使用绝对路径
【发布时间】:2018-09-30 02:48:54
【问题描述】:

我正在使用 System.IO.StreamReader 传递字符串路径 (@"C:\Users\someuser\somefolder\my.csv")

        using (var reader = new StreamReader(filepath))
        {
            var csvReader = new CsvReader(reader);
            var entries = csvReader.GetRecords<SpreadsheetEntry>();
            return entries.ToList();
        }

这会引发以下异常:

System.IO.IOException

HResult=0x8007007B Message=文件名、目录名称或卷标语法不正确

'C:\Users\someuser\Source\Repos\StakeParser\StakeParser\bin\Debug\netcoreapp2.1\C:\Users\someuser\Desktop\testspreadsheet.csv' 源=System.Private.CoreLib 堆栈跟踪: 在 System.IO.FileStream.ValidateFileHandle(SafeFileHandle 文件句柄) .....

我的问题是,我如何使用这种正确性,以便以后可以在控制台中将完整路径作为参数传递? , 目前它从工作路径而不是绝对路径开始......

【问题讨论】:

  • 请发布所有相关代码
  • all there: 1) 路径字符串 2) StreamReader 接受字符串并抛出错误 3) 异常和详细信息,基本上它说该路径没有文件,因为它结合了应用程序路径和文件路径传递给 StreamReader。
  • 你确定所有的代码都在那里。您传递的路径和异常中抛出的路径表明路径设置不正确。如果您之前设置了正确的路径,那么CSVReader 类很可能正在从其他地方获取路径。
  • 请检查我的问题的第二行。这是我传递给读者的字符串中唯一的东西。阅读器然后进行连接...

标签: c# csv path streamreader absolute-path


【解决方案1】:

这里提供了答案。 Streamreader 将绝对路径添加到其运行所在的工作路径中。

http://www.introprogramming.info/tag/streamreader-class/

【讨论】:

    【解决方案2】:

    C:\Users\someuser\Source\Repos\StakeParser\StakeParser\bin\Debug\netcoreapp2.1\‪C:\Users\someuser\Desktop\testspreadsheet.csv

    仔细看filepath变量StreamReader(filepath)是2条路径组合在一起:

    C:\Users\someuser\Source\Repos\StakeParser\StakeParser\bin\Debug\netcoreapp2.1\
    
    C:\Users\someuser\Desktop\testspreadsheet.csv
    

    我猜你只想要它的第二部分。在显示的代码之前的某个地方,您可能会连接当前工作目录和文件名,但该文件名已经是一个完整的路径。

    .NET 有 Path 类,对于处理路径非常有用:https://docs.microsoft.com/en-us/dotnet/api/system.io.path

    【讨论】:

    • 我会检查路径类。我想你没明白。看看我的问题的第一行:我传递了一条路径,之后没有对该字符串做任何事情。然后阅读器将两条路径连接起来。为什么?我不知道,这是我的问题。似乎路径从应用程序文件夹开始,所以它需要那个路径并添加我给读者的路径......
    • 为了让它很容易理解,我做了这个:new StreamReader(@"C:\Users\someuser\somefolder\my.csv");并获取异常信息:HResult=0x8007007B 消息=文件名、目录名或卷标语法不正确:'C:\Users\someuser\Source\Repos\StakeParser\StakeParser\bin\Debug\netcoreapp2.1\ C:\Users\someuser\Desktop\testspreadsheet.csv'
    • 您还没有发布所有重要的代码 - 这里最可能的问题是变量文件路径未设置您提到的方式。如果您将有效路径传递给 StreamReader,则它可以正常工作。在调试器中设置断点并查看文件路径,然后返回设置的位置并修复它。
    • 如果文件路径在所示代码的开头是正确的,那么另一个地方就是 CsvReader——它不是标准的 C# 函数。你在使用图书馆吗?
    【解决方案3】:

    有时 C# 不允许从 C:\Users... 文件夹读取数据。

    使用其他文件夹,例如 D:\SomeFolder。

    它会解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2019-08-16
      • 2021-05-30
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多