首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StreamReader在读取文件时引发System.IO.FileInfo[]异常

StreamReader在读取文件时引发System.IO.FileInfo[]异常
EN

Stack Overflow用户
提问于 2017-05-22 08:56:37
回答 2查看 168关注 0票数 0

每次我尝试使用StreamReader读取文件时,它都会抛出以下异常:

找不到System.IO.FileInfo[]。

这是我的代码:

代码语言:javascript
复制
Dim dinfo As New DirectoryInfo(TextBox1.Text)

Dim files As FileInfo() = dinfo.GetFiles("*.txt", SearchOption.AllDirectories)

Dim sr = New StreamReader(TextBox1.Text & "/" & dinfo.GetFiles.ToString)

在我的代码中,我有这个示例,我不知道它是否相关,但以防万一:

代码语言:javascript
复制
Dim dinfo As New DirectoryInfo(TextBox1.Text)

Dim files As FileInfo() = dinfo.GetFiles("*.txt", SearchOption.AllDirectories)

ListBox1.Items.Clear()
For Each file As FileInfo In files
    ListBox1.Items.Add(file.Name)
 Next

我试图将所有找到的.txt文件传递给StreamReader,这样StreamReader就可以逐个读取所有已找到的.txt文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-22 09:27:02

你不能那样使用dinfo.GetFiles.ToString。这将返回System.IO.FileInfo[],而StreamReader则期待路径或流。我觉得在这种情况下是一条路。

另外,考虑使用Path.Combine,而不是将字符串连接在一起创建路径。虽然最后我不认为你真的需要这个,但是值得一读。

我还会考虑在使用使用时实现StreamReader

有时,您的代码需要非托管资源,例如文件句柄、COM包装器或SQL连接。当代码完成时,使用块可以保证处理一个或多个这样的资源。这使得其他代码可以使用它们。

根据你的评论,我认为你想要的是这样的:

代码语言:javascript
复制
Dim dinfo As New DirectoryInfo(TextBox1.Text)
For Each f In dinfo.GetFiles("*.txt", SearchOption.AllDirectories)
    Using sr As New StreamReader(f.FullName)
        While Not sr.EndOfStream
            Debug.WriteLine(sr.ReadLine())
        End While
    End Using
Next
票数 1
EN

Stack Overflow用户

发布于 2017-05-22 09:22:49

这个问题很简单--如果我没有弄错的话--是因为您将数组传递给了StreamReader,但是StreamReader一次只能读取一个文件。

我在这里介绍的是使用您的ListBox方法,但这不是推荐的版本。

子以将所有*.txt文件添加到列表框中:

代码语言:javascript
复制
Public Sub AddToList(ByVal pather As String)
    Dim Names As String() = Directory.GetFiles(pather, "*.txt", SearchOption.AllDirectories)
    ' Display all files.
    For Each name As String In Names
        ListBox1.Items.Add(name)
    Next
End Sub

然后分读所有的*.txt:

代码语言:javascript
复制
Public Sub ReadAllTxt()
    For Each item In ListBox1.Items
        Console.Write(File.ReadAllText(item))
    Next
End Sub

更好的方法是在我们浏览文件时直接阅读:

代码语言:javascript
复制
Public Sub ReadAllTxt(ByVal pather As String)
    Dim Names As String() = Directory.GetFiles(pather, "*.txt", SearchOption.AllDirectories)
    ' Display all files.
    For Each name As String In Names
        ListBox1.Items.Add(name)
        Console.Write(File.ReadAllText(name))
    Next
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44108658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档