VB.NET文件错误75 - 路径/文件访问错误 - 我的文件是如何锁定的?我需要删除它

时间:2015-09-24 21:25:49

标签: vb.net file locking

我收到错误75 - 当我尝试删除文件时出现文件/路径访问错误(下面代码块的最后几行):

        ' make a reference to a directory
    Dim directory As New IO.DirectoryInfo(WatchDirectory) 'ex C:\Print\Realtime\
    Dim directoryList As IO.FileInfo() = directory.GetFiles(WatchFilter) 'ex *.xml
    Dim directoryFile As IO.FileInfo

    'list the names of all files in the specified directory
    For Each directoryFile In directoryList
        'scans the Realtime folder (WatchDirectory) for each specified file (WatchFilter / xml) for processing.
        If directoryFile.Name = RealTimeFile Then
            'checks if the file is realtime by matching the name up to the ProcessRealtimeFile app setting (ex realtime.xml)
            Continue For
        Else
            'this is not a ProcessRealtimeFile app setting (ex realtime.xml) file
            Dim Name As String
            Dim renameRetries As Integer = 5

            'get file name without extension
            Name = IO.Path.GetFileNameWithoutExtension(directoryFile.Name)

            While True
                Try
                    If File.Exists(ProcessDirectory & RealTimeFile) = False Then
                        'the current file to be checked against in the watch directory does not exist in the processdirectory (ex. C:\Print\Oracle\xml.rt\). continue.
                        Log.Write(Log.Level.Information, "RTPrint-Diamond", Environment.UserName, Environment.MachineName, "File " & directoryFile.FullName & " is being processed by scrape.")

                        If ArchiveXML = True Then
                            'copy the current file to the archive directory (ex C:\print\xml.rt\archive\), overwriting the existing file if exists
                            System.IO.File.Copy(directoryFile.FullName, ArchiveDirectory & directoryFile.Name, True)
                        End If

                        'update the date and time of the active file to now
                        System.IO.File.SetLastWriteTime(directoryFile.FullName, Date.Now)
                        Log.Write(Log.Level.Information, "RTPrint-Diamond", Environment.UserName, Environment.MachineName, "Date Changed.")

                        If ISPublisher(directoryFile.FullName) Then
                            'Current file is a publisher file. Process
                            Dim fileInfo As New IO.FileInfo(directoryFile.FullName)
                            Dim utf8WithoutBOM As New System.Text.UTF8Encoding(False) 'file encoding type - UTF8 w/o BOM

                            Using writer As StreamWriter = New StreamWriter(Path.Combine(PublisherProcessDirectory, directoryFile.Name), False, utf8WithoutBOM)
                                'set up write to the publisher process directory (ex C:\print5x\xml.rt\)
                                'publisher requires utf8 w/o BOM to read the file. We need to change the encoding type to this standard.
                                'this converts the file to utf8 w/o BOM to the 5x output destination
                                Using reader As StreamReader = fileInfo.OpenText
                                    While Not reader.EndOfStream
                                        Dim line As String = reader.ReadLine
                                        writer.Write(line & vbCrLf)
                                    End While
                                    reader.Close()
                                End Using
                                writer.Close()
                            End Using

                            If File.Exists(Path.Combine(PublisherProcessDirectory, directoryFile.Name)) Then
                                'make sure the destination file was successfully re-written in utf8 w/o bom and delete the source file
                                If IsFileOpen(directoryFile.FullName, 1) = True Then
                                    Microsoft.VisualBasic.FileClose(1)
                                End If

                                System.IO.File.Delete(directoryFile.FullName)
                            End If

我甚至使用我在本网站上阅读的一些示例解决方案进行测试,以运行功能测试以查看是否存在锁定(给出错误75),如果返回true,则尝试关闭文件但也没有做任何事情。

显然我的writer.Close()没有做好这项工作。任何人都可以发现为什么System.IO.File.Delete(directoryFile.FullName)不允许我访问此文本文件进行删除,以及我如何解锁它以删除?它是锁定我的文件的每一个?我需要删除循环中的文件,所以如果for循环锁定了我,这里的解决办法是什么?

此外,我通过删除整个编写器块和其上面的2个声明变量来测试删除,并且该文件仍然具有锁定。这有助于将问题与周围的逻辑隔离,而不是streamWriter部分。

提前致谢!

0 个答案:

没有答案