0

请帮助...当我尝试解压缩文件夹时出现错误“文件存在”。起初,代码工作正常,但后来我遇到“文件存在”这是我的代码:

Private Sub unzip(ByVal Source As String, ByVal Output As String)
    Dim m_Sc As New Shell32.Shell
    If Directory.Exists(Output) Then
        Directory.Delete(Output)
    End If
    Dim m_Output As Shell32.Folder = m_Sc.NameSpace(Output)
    Dim m_Source As Shell32.Folder = m_Sc.NameSpace(Source)
    m_Output.CopyHere(m_Source.Items, 4)
End Sub

我正在使用 vb.net(3.5) 2008 在此先感谢

4

2 回答 2

3

我找到了我的问题的答案(感谢stackoverflow)

问题:当我反复解压缩同一个文件时,它会在临时目录中创建提取文件的副本。如果临时目录已达到其限制(99 个副本),则它会导致错误“文件存在”。

临时目录位置:“C:\Documents and Settings(您的用户帐户)\Local Settings\Temp”。

您可以使用 (My.Computer.FileSystem.SpecialDirectories.Temp) 或 (Environment.GetEnvironmentVariable("TEMP")) 在 .net 中访问它们。

解决方案:在解压缩(提取)文件之前,我首先删除临时文件夹中的先前副本。这是我清除临时目录的代码:

Sub CleanUpTemporaryFiles()
    Dim m_StrTemporaryDirectory As String = ""

    'Get the Temporary folder directory
    m_StrTemporaryDirectory = Environment.GetEnvironmentVariable("TEMP")
    If Directory.Exists(m_StrTemporaryDirectory & _
                        "\Temporary Directory 1 for " & _
                        m_ApplicationName & ".zip\") Then

        Dim directory As String = m_StrTemporaryDirectory & _
                                 "\Temporary Directory 1 for " & _
                                  m_ApplicationName & ".zip\" & _
                                  m_ApplicationName

        Dim dirInfo As New DirectoryInfo(directory)
        'Loop on all the files
        For Each f In IO.Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories)
            'Change the the file attribute to not read only so that it will not get an error deleting the file

            File.SetAttributes(f.ToString, File.GetAttributes(f.ToString) _
                               Xor FileAttributes.ReadOnly Or FileAttributes.Hidden)
            'Delete the file
            File.Delete(f)
        Next

        If System.IO.Directory.Exists(My.Computer.FileSystem.SpecialDirectories.Temp & _
                                      "\Temporary Directory 1 for " & m_ApplicationName & ".zip") Then

            System.IO.Directory.Delete(My.Computer.FileSystem.SpecialDirectories.Temp & _
                                       "\Temporary Directory 1 for " & m_ApplicationName & ".zip", True)

        End If
    End If
End Sub

我不太擅长解释事情,但如果您有任何问题或建议,请随时发表评论。

于 2013-03-21T09:54:46.850 回答
0

在这一行

m_Output.CopyHere(m_Source.Items, 4)

如果将其更改为值 16 会发生什么?

m_Output.CopyHere(m_Source.Items, 16)

如果文件已经存在,它会覆盖文件吗?

于 2013-03-19T06:27:04.813 回答