Vb.net 文件可以';无法访问,因为它';它已经在使用了

Vb.net 文件可以';无法访问,因为它';它已经在使用了,vb.net,Vb.net,我有一个Sub读取另一个Sub中创建的文件。我收到一个错误 无法访问其他进程中正在使用的文件 根据我在网上看到的内容,我需要关闭StreamReader。我尝试在不同的变量上使用.close(),但似乎没有任何效果 下面是编写另一个子系统随后访问的文件的代码 Private Sub CreateGraphicsFunction(sender As Object, e As EventArgs) Dim Regex = New Regex("infoEntityIdent=""(ICN.

我有一个Sub读取另一个Sub中创建的文件。我收到一个错误

无法访问其他进程中正在使用的文件

根据我在网上看到的内容,我需要关闭StreamReader。我尝试在不同的变量上使用
.close()
,但似乎没有任何效果

下面是编写另一个子系统随后访问的文件的代码

Private Sub CreateGraphicsFunction(sender As Object, e As EventArgs)

    Dim Regex = New Regex("infoEntityIdent=""(ICN.+?)[""].*?[>]")
    strGraphicFile = MoveLocation & "\ICN-LIST.txt"

    Dim ICNFiles = Directory.EnumerateFiles(MovePath, "*.*", SearchOption.AllDirectories)

    For Each tFile In ICNFiles
        Dim input = File.ReadAllText(tFile)

        Dim match = Regex.Match(input)
        If match.Success Then
            output.Add(match.Groups(1).Value)
        End If
    Next
    File.WriteAllLines(strGraphicFile, output)
    locationGraphicsLog = strGraphicFile

End Sub
读取创建的文件的另一个子系统

 Private Sub btnFindICN_Click(sender As Object, e As EventArgs) Handles btnFindICN.Click


    Application.UseWaitCursor = True
    Application.DoEvents()
    Me.Refresh()

    Dim sGraphicFilesToFind As String
    Dim graphicLocation As String
    'MoveWithPath As String
    Dim graphicFile As String

    graphicLocation = txtSearchICN.Text
    MoveLocation = MovePath

    graphicLogFile = MoveLocation & "\Reports\1-OrphanedFilesItems.txt"
    Dim FILE_NAME As String
    FILE_NAME = MoveLocation & "\ICN-LIST.txt"


    Dim objReader As New System.IO.StreamReader(FILE_NAME)
    Dim sGraphicFile As String

    Do While objReader.Peek() <> -1
        graphicFile = objReader.ReadLine()
        sGraphicFilesToFind = graphicLocation & "\" & graphicFile & "*.*"
        sGraphicFile = graphicFile
        Dim createGraphicReportFldr As String

        Dim paths() As String = IO.Directory.GetFiles(graphicLocation, sGraphicFile, IO.SearchOption.AllDirectories)
        If paths.Count = 0 Then
            'Debug.Print(graphicFile)
            If System.IO.File.Exists(graphicLogFile) = True Then
                Dim objWriter As New System.IO.StreamWriter(graphicLogFile, IO.FileMode.Append)
                objWriter.WriteLine(graphicFile)
                objWriter.Close()
            Else
                'MsgBox("Creating Orphaned graphicFile Now. ")

                createGraphicReportFldr = MoveLocation & "\Reports"
                If Not IO.Directory.Exists(createGraphicReportFldr) Then
                    IO.Directory.CreateDirectory(createGraphicReportFldr)
                    'MsgBox("folder created" & createGraphicReportFldr)

                    Dim writeFile As IO.StreamWriter
                    writeFile = IO.File.CreateText(graphicLogFile)
                    writeFile.Write(graphicFile & vbCrLf)
                    writeFile.Close()
                Else
                    'MsgBox("Folder already exist")
                End If
            End If
        Else
            For Each pathAndFileName As String In paths
                Dim createGraphicsFolder As String
                'Dim moveFileToNewFolder As String

                If System.IO.File.Exists(pathAndFileName) = True Then
                    Dim sRegLast As String = pathAndFileName.Substring(pathAndFileName.LastIndexOf("\") + 1)
                    Dim toGraphiicFileLocation As String

                    'MsgBox("sRegLast " & sRegLast)
                    fileGraphicLoc = MoveLocation & sRegLast
                    createGraphicsFolder = MoveLocation & "\Figures"
                    moveGraphicFileToNewFolder = MoveLocation & "\Figures\" & sRegLast
                    toGraphiicFileLocation = createGraphicsFolder & "\" & sRegLast
                    'MsgBox("FileLoc " & fileLoc)

                    If Not IO.Directory.Exists(createGraphicsFolder) Then
                        IO.Directory.CreateDirectory(createGraphicsFolder)
                        ' MsgBox("folder created" & createGraphicsFolder)
                    End If

                    If System.IO.File.Exists(fileGraphicLoc) = False Then
                        System.IO.File.Copy(pathAndFileName, moveGraphicFileToNewFolder)
                        Debug.Write("Graphics moved to : " & moveGraphicFileToNewFolder & vbCrLf)
                    End If
                End If

            Next
        End If
    Loop
    'MsgBox("graphicFiles have been moved")

    Call CreateGraphicsFunction(Nothing, System.EventArgs.Empty)
    Application.UseWaitCursor = False
    Application.DoEvents()
    ' Me.Close()
End Sub
Private子btnFindICN\u Click(发送者作为对象,e作为事件参数)处理btnFindICN。单击
Application.UseWaitCursor=True
Application.DoEvents()
我
Dim SGRAPHICFILES以字符串形式查找
将图形位置设置为字符串
'移动路径作为字符串
将图形文件设置为字符串
graphicLocation=txtSearchICN.Text
MoveLocation=MovePath
graphicLogFile=MoveLocation&“\Reports\1-OrphanedFileItems.txt”
Dim文件名为字符串
文件名=MoveLocation&“\ICN-LIST.txt”
Dim objReader作为新System.IO.StreamReader(文件名)
将文件设置为字符串
Do While objReader.Peek()-1
graphicFile=objReader.ReadLine()
sGraphicFilesToFind=graphicLocation&“\”和graphicFile&“****”
sGraphicFile=graphicFile
Dim createGraphicReportFldr作为字符串
Dim paths()的格式为String=IO.Directory.GetFiles(graphicLocation、sGraphicFile、IO.SearchOption.AllDirectories)
如果paths.Count=0,则
'调试.Print(图形文件)
如果System.IO.File.Exists(graphicLogFile)=True,则
Dim objWriter作为新System.IO.StreamWriter(graphicLogFile、IO.FileMode.Append)
objWriter.WriteLine(图形文件)
objWriter.Close()
其他的
'MsgBox(“立即创建孤立图形文件”)
createGraphicReportFldr=MoveLocation&“\Reports”
如果不存在IO.Directory.Exists(createGraphicReportFldr),则
IO.Directory.CreateDirectory(createGraphicReportFldr)
'MsgBox(“已创建文件夹”&createGraphicReportFldr)
作为IO.StreamWriter的Dim writeFile
writeFile=IO.File.CreateText(graphicLogFile)
writeFile.Write(图形文件和vbCrLf)
writeFile.Close()
其他的
'MsgBox(“文件夹已存在”)
如果结束
如果结束
其他的
对于路径中的每个pathAndFileName作为字符串
将createGraphicsFolder设置为字符串
'将moveFileToNewFolder设置为字符串
如果System.IO.File.Exists(路径和文件名)=True,则
Dim sRegLast As String=pathAndFileName.Substring(pathAndFileName.LastIndexOf(“\”)+1)
Dim toGraphiicFileLocation作为字符串
'MsgBox(“sRegLast”&sRegLast)
fileGraphicLoc=MoveLocation&sRegLast
createGraphicsFolder=MoveLocation&“\Figures”
moveGraphicFileToNewFolder=MoveLocation&“\Figures\”&sRegLast
toGraphiicFileLocation=createGraphicsFolder&“\”&sRegLast
'MsgBox(“FileLoc”和FileLoc)
如果不存在IO.Directory.Exists(createGraphicsFolder),则
IO.Directory.CreateDirectory(createGraphicsFolder)
'MsgBox(“已创建文件夹”和createGraphicsFolder)
如果结束
如果System.IO.File.Exists(fileGraphicLoc)=False,则
System.IO.File.Copy(路径和文件名,移动图形文件到新文件夹)
Debug.Write(“图形移动到:”&moveGraphicFileToNewFolder&vbCrLf)
如果结束
如果结束
下一个
如果结束
环
'MsgBox(“图形文件已移动”)
调用CreateGraphicsFunction(无,System.EventArgs.Empty)
Application.UseWaitCursor=False
Application.DoEvents()
“我,关上()
端接头
在“其他子项”中,更改

并将
添加到使用完的地方。可能就在
循环之后
。这将确保始终处理一次性流


看。如果能够将IDisposable对象的作用域限制为单个方法,则几乎总是希望将其包装在Using块中。

在哪一行收到错误消息?文件可能重复。WriteAllines(strGraphicFile,output)是我收到错误的地方。我唯一的其他输出位置是File.WriteAllines(strGraphicFile,output)并声明变量“读取文件的子文件”-您也应该显示该变量。您只显示了写入文件的位置。我尝试将其放置在using块中。由于某种原因,那艘潜艇现在根本不跑了
Dim objReader As New System.IO.StreamReader(FILE_NAME)
Using objReader = New System.IO.StreamReader(FILE_NAME)