vb.net上的“文件存在”错误使用shell 32解压缩

时间:2013-03-19 05:49:11

标签: vb.net

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

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 提前致谢

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

在这一行

m_Output.CopyHere(m_Source.Items, 4)

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

m_Output.CopyHere(m_Source.Items, 16)

如果文件已存在,是否会覆盖该文件?