我正在使用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 fileHandle) .....
我的问题是,如何使用此更正,以便以后可以在控制台中将全路径作为参数传递? ,此刻它是从工作路径开始的,而不是走绝对路线...
答案 0 :(得分:0)
C:\Users\someuser\Source\Repos\StakeParser\StakeParser\bin\Debug\netcoreapp2.1\C:\Users\someuser\Desktop\testspreadsheet.csv
仔细查看文件路径变量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
答案 1 :(得分:0)
此处提供了答案。 Streamreader将绝对路径添加到其运行所在的工作路径。
答案 2 :(得分:0)
有时C#不允许从C:\ Users ...文件夹中读取数据。
使用其他文件夹,例如D:\ SomeFolder。
它将解决问题。