How to check if the text file is open and close the text file?

后端 未结 5 1079
忘了有多久
忘了有多久 2020-12-06 15:38

I am trying to save the text file in this path:\"C:\\Test\\test.txt\" and when the file is already opened I need to check whether the file is opened and I need to close it b

相关标签:
5条回答
  • 2020-12-06 16:10

    I do not believe there is a property that will allow for you to check if the streamreader is open or not.

    Best practice seems to be to .close the reader when done with it. (All in the method that it was used in.)

    You could try a try block to handle the exception if you are still getting one.

    May be able to find additional info and some sample code here. Good Luck.

    MSDN! StreamReader

    EDIT: You may be able to check using this. IO.File

    Private Function CheckFile(ByVal filename As String) As Boolean
    
        Try
            System.IO.File.Open(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
            FileClose(1)
            Return False
        Catch ex As Exception
            Return True
        End Try
    
    End Function
    
    0 讨论(0)
  • 2020-12-06 16:12

    I was having this problem with a .csv file my program attaches to an email. I added code to clear the Attachments collection in the MailMessage object then disposing the MailMessage and Attachment objects after the mail is sent. That appears to have fixed the problem.

    0 讨论(0)
  • 2020-12-06 16:13

    The following function can be used to determine is a file is already open (True) or not (False). Action can then be based on the Function result.

    Public Function IsFileOpen(ByVal xFileName As String, ByVal xFileChannel As Integer) As Boolean
        ' ************************************************************
        ' * Function: IsFileOpen
        ' * Purpose:  To determine if a file is already open.
        ' *           Can be used to determine if a file should be closed.
        ' * Syntax:
        ' *     Dim bResult as Boolean
        ' * 
        ' *     bResult = IsFileOpen("C:\Test.txt", 1) 
        ' * 
        ' *     OR
        ' * 
        ' *     If IsFileOpen("C:\Test.txt", 1) = True Then
        ' *         Microsoft.VisualBasic.FileClose(1)
        ' *     End If
        ' * 
        ' ************************************************************
        Try
            Microsoft.VisualBasic.FileOpen(xFileChannel, xFileName, OpenMode.Input, OpenAccess.Read, OpenShare.Default)
        Catch
            ' File Already Open Error Number = 55
            If Trim(Err.Number.ToString) = "55" Then
                Return True
            Else
                Return False
            End If
        End Try
    End Function
    
    0 讨论(0)
  • 2020-12-06 16:16

    What about :

    If File.Exists("File1.txt") = False Then
                File.CreateText("File1.txt").Close()
            Else
                Exit Sub
            End If
    
            If File.Exists("File2.txt") = False Then
                File.CreateText("File2.txt").Close()
            Else
                Exit Sub
            End If
    End If
    
    0 讨论(0)
  • 2020-12-06 16:19
    Private Sub IsFileOpen(ByVal file As FileInfo)
        Dim stream As FileStream = Nothing
        Try
            stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None)
        Catch ex As IOException 
    
            If IsFileLocked(ex) Then
              'do something here, either wait a few seconds, close the file if you have  
              'a handle, make a copy of it, read it as shared (FileAccess fileAccess = FileAccess.Read, FileShare fileShare = FileShare.ReadWrite). 
              'I dont recommend terminating the process - which could cause corruption and lose data
            End If
        Catch ex As Exception
    
        End Try
    End Sub
    
    Private Shared Function IsFileLocked(exception As Exception) As Boolean
        Dim errorCode As Integer = Marshal.GetHRForException(exception) And ((1 << 16) - 1)
        Return errorCode = 32 OrElse errorCode = 33
    End Function
    
    0 讨论(0)
提交回复
热议问题