4

在 C# 中,如何获取 streamreader 的名称或路径

IE

filein = new StreamReader(@"C:\ee\fff\Desktop\spreadtool\test.csv");

现在我想在路径上进行正则表达式,我该如何引用上面的内容。我知道 filestreamer 有一个 getname() 方法,但 streamreader 有吗?我查了一下,好像没有。

4

4 回答 4

12

StreamReader 没有包含创建它的 FilePath 的属性。它可能根本不是从文件创建的(它可以从流中创建)。如果需要路径,则应在创建 StreamReader 之前将其存储在字符串中

String file = @"C:\ee\ccc\Desktop\spreadtool\test.csv"
filein = new StreamReader(file);
String path = Path.GetDirectory(file);
于 2013-07-17T15:46:41.870 回答
8

你可以做的是:

var filein = new StreamReader(filename);

string name = null;
if (filein.BaseStream is FileStream)
{
    name = (filein.BaseStream as FileStream).Name;
}
于 2013-07-17T15:50:03.633 回答
6

是什么让您如此确定给定的 StreamReader 具有名称或路径?您可能正在从网络读取数据,或者从内存流、串行连接、命名管道、数据库链接......这个列表还在继续。

于 2013-07-17T15:46:32.633 回答
1

您没有提及为什么要通过阅读器访问路径,所以我假设您想将“某物”传递给另一个方法,根据其路径检查它是否是特定类型,然后阅读它。

您可以使用FileInfo传递文件的信息,包括其完整路径、大小、扩展名等,并使用FileInfo.OpenText()在其上打开 StreamReader,例如:

var fileInfo=new FileInfo(@"c:\path\to\my\file.csv");
....
using(var reader=fileInfo.OpenText())
{
    var line=reader.ReadLine();
    ....
}

通过这种方式,您可以避免对 FileStream 进行奇怪的强制转换,或者必须打开 StreamReader(锁定文件)只是为了传递名称。

于 2013-07-17T15:58:07.967 回答